类的继承 人 男人/女人 中国男人/女人
子类继承父类的所有属性和方法
可以增加类属性,可以增加对象属性
可以去新增方法
可以去修改父类的方法
例1:女人类继承人类, 增加新的类属性
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def run(self):
return f"{self.name}会跑"
class Woman(Person): # 女人类继承了人类
__gender = '女' # 新增了一个私有的类属性
def __init__(self,name,age):
super().__init__(name,age) # 调用父类的初始化方法初始化子类
@property # 将私有类属性通过方法返回,并封装
def gender(self):
return self.__gender;
def say(self): # 新增了一个方法
return '我说话声音好听'
ly = Woman('卢炎',19) # 实例化
ly.name # 可以使用父类的属性
ly.run() # 可以调用父类的方法
ly.gender # 可以调用新增的类属性,子类独有
ly.say() # 子类中独有的方法
例2: 男人继承人类, 新增方法, 修改父类方法
# 举一反一,修改父类的方法
class Man(Person):
__gender = '男' # 新增了一个私有的类属性
def __init__(self,name,age):
super().__init__(name,age)
@property # 将私有类属性通过方法返回,并封装
def gender(self):
return self.__gender;
def say(self):
return '我说话声音粗犷'
def run(self): # 修改了父类的方法
return f"我{self.name}跑的快"
ch = Man('成浩',19)
ch.run() # 调用子类中同名方法.
例3: 子类新增对象属性, 父类对象有的属性, 让父类初始化, 其余的自己初始化
# 增加对象属性,父类对象有的参数,让父类初始化,没有的自己初始化
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
class Man(Person):
def __init__(self,name,age,height):
super().__init__(name,age)
self.height = height
ch = Man('成浩',18, 186)
ch.height
例4: 中国男人继续继承男人类
# 多层继承
class ChineseMan(Man):
__nationality = "中国"
def __init__(self,name,age,height):
super().__init__(name,age,height)
ch = ChineseMan('成浩',18, height=186)
ch.height
例5: 多态
# 多态, 同一个函数, 传入的对象类型不同, 表现出不同的输出形态
class Pet:
def __init__(self,name,color):
self.name = name
self.color = color
def say(self):
return 'hello'
class Dog(Pet):
kind = "小狗"
def __init__(self,name,color):
super().__init__(name,color)
def say(self):
return '汪汪汪'
class Cat(Pet):
kind = "小猫"
def __init__(self,name,color):
super().__init__(name,color)
def say(self):
return '喵喵喵'
def say(cls,name,color):
print(cls(name,color).say())
# 多态, 用一个函数, 针对不同对象, 有不同的表现
say(Pet,'小白','白色') # hello
say(Dog,'小白','白色') # 汪汪汪
say(Cat,'小白','白色') # 喵喵喵
例6:设置可变参数, 使用setattr
# 类可变参数传值 setattr
class Pet:
def __init__(self,name,**kwargs):
self.name = name
for attr, value in kwargs.items():
setattr(self, attr, value)
class Dog(Pet):
def __init__(self,name,**kwargs):
super().__init__(name,**kwargs)
xb = Dog('小白',color='白色',age=3)
xb.color
留言