Python類的重寫和私有變量orm
一、 類的重寫get
若是子類沒有定義__init__()方法,子類初始化的時候就會調用父類的方法,可是當子類定義了__init__()方法,子類就不會調用父類的__init__()方法,it
class ren(object): ren_name = 'ren' sex = 'F' def __init__(self,address,age): self.address = address self.age = age print('ren is {0}'.format(self.ren_name)) def get_name(self): return self.name def get_sex(self): return self.sex class child(ren): child_name = 'test' # sex = 'M' def __init__(self,address,age): super(child,self).__init__(address,age) # ren.__init__(self,address,age) print('my name is {0}'.format(self.child_name)) def hello(self): print('hello world!') def get_name(self): print('todaoy is nice day.') test = child('beijing',20) test.hello() test.get_name() print(test.get_sex()) print(test.address) print(test.age)
結果:ast
ren is renform
my name is testclass
hello world!test
todaoy is nice day.import
F變量
beijingmodule
20
二、 類的私有變量
在Python中能夠經過在屬性變量名前加上雙下劃線定義屬性爲私有屬性
_xx 以單下劃線開頭的表示的是protected類型的變量。即保護類型只能容許其自己與子類進行訪問。
__xx 雙下劃線的表示的是私有類型的變量。只能容許這個類自己進行訪問了,連子類也不能夠用於命名一個類屬性(類變量),私有變量,不容許進行實例化
__xx__定義的是特列方法。用戶控制的命名空間內的變量或是屬性,如init , __import__或是file 。
class A(object): _name = 'abc' __sec = 'F' def hello(self): print(self._name) print(self.__sex) a = A() print(a._name) print(a.__sex)
結果:
abc
Traceback (most recent call last):
File "C:/Users/admin/PycharmProjects/test/class/lei4.py", line 17, in <module>
print(a.__sex)
AttributeError: 'A' object has no attribute '__sex'
class A(object): _name = 'abc' __sex = 'F' def hello(self): print(self._name) print(self.__sex) a = A() print(a._name) a.hello()
結果:
abc
abc
F
class A(object): _name = 'abc' __sex = 'F' def hello(self): print(self._name) print(self.__sex) def get_sex(self): return self.__sex a = A() print(a._name) a.hello() print(a.get_sex())
結果:
abc
abc
F
F