#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