#conding: utf-8
class Programer(object): #定義了一個Programer類
hobby = "Play Computer" #在類裏面直接定義一個屬性hobby
def __init__(self, name, age, weight): #在構造函數裏面定義了三個屬性
self.name = name
self._age = age
self.__weight = weight
@classmethod #方法的裝飾器;調用的時候直接用類名,而不是某個對象
def get_hobby(cls):
return cls.hobby
@property #方法的裝飾器;像訪問屬性一樣調用方法
def get_weight(self):
return self.__weight
def self_introduction(self):
print('My name is %s \nI am %s years old\n' % (self.name, self._age))
#類的繼承
class BackendProgramer(Programer): #定義一個BackendProgramer類,繼承了Programer類
'''
對構造函數進行了修改,多出一個language屬性,
使用super調用了BackendProgramer父類的構造函數,
將language屬性進行了賦值
'''
def __init__(self,name, age, weight, language): #構造函數多出一個language屬性
super(BackendProgramer, self).__init__(name, age, weight) #使用super調用了BackendProgramer父類的構造函數
self.language = language #將language屬性進行了賦值
if __name__ == '__main__':
programer = BackendProgramer('jodie', 25, 85, 'python') #將BackendProgramer這個類進行實例化
print(dir(programer)) #將BackendProgramer類的屬性打印一下
print(programer.__dict__) #輸出這個對象在構造函數裏所賦予的值的屬性
# 判斷programer的種類,可以看到打印結果爲BackendProgramer類
print(type(programer))
#判斷一下這個對象判斷類型的時候是不是會被認爲它的父類就是Programer這個類
#一個對象,它是從屬於它的父類的,在判斷類型的時候,它會被認爲自己所在類的父類;所以打印結果爲:True
print(isinstance(programer, Programer))
--------------------------------------
運行後的打印結果:
D:\Jodie2019\venv\Scripts\python.exe D:/Jodie2019/study/study6類的繼承.py
['_Programer__weight', '__class__', '__delattr__', '__dict__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__le__',
'__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight',
'hobby', 'language', 'name', 'self_introduction']
{'name': 'jodie', '_age': 25, '_Programer__weight': 85, 'language': 'python'}
<class '__main__.BackendProgramer'>
True
Process finished with exit code 0