20201221-1 类的继承1
2021-04-16 23:41
94 查看
面向对象三大特性: 封装 继承# 动物包含所有的动物,动物又包含会飞的不会飞的,飞禽走兽等# 不同的动物都能吃喝拉撒睡# 大类已经包含吃喝拉撒,小类就不需要包含了多态class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) # 现在需要写一个子类,子类是男人# Man 需要继承父类# 继承后,里面什么也不写也没关系class Man(People):pass# 实例化m1 = Man() --->TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'需要传名字才可以,因为是继承了的
1-1class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) # 现在需要写一个子类,子类是男人# Man 需要继承父类# 继承后,里面什么也不写也没关系class Man(People):pass# 实例化m1 = Man("NiuHanYang",222) # 调用m1.eat()--->NiuHanYang is eating... Man直接继承了父类的方法
1-2可以写一些自己的方法吗?class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) # 现在需要写一个子类,子类是男人# Man 需要继承父类# 继承后,里面什么也不写也没关系class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name) m1 = Man("NiuHanYang",222) m1.eat() m1.piao()--->NiuHanYang is eating... NiuHanYang is piaoing.....20s......done.
1-3-1可以重构父类方法吗?比如增加新功能class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self):print("man is sleeping") m1 = Man("NiuHanYang",222) m1.eat() m1.piao() m1.sleep()--->NiuHanYang is eating... NiuHanYang is piaoing.....20s......done. man is sleeping 父类的没有执行,被覆盖了
1-3-2但是,这里想要的是增加新功能class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self): People.sleep(self) print("man is sleeping") m1 = Man("NiuHanYang",222) m1.eat() m1.piao() m1.sleep()--->NiuHanYang is eating... NiuHanYang is piaoing.....20s......done. NiuHanYang is sleeping... man is sleeping 直接调用父类方法,然后将self自己传进去,父类方法就执行了 这就等于重构了父类方法
1-4-1再写一个类class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self): People.sleep(self) print("man is sleeping")class Woman(People):def get_birth(self):print("%s is born a baby...."%self.name) m1 = Man("NiuHanYang",222) m1.eat() m1.piao() m1.sleep() w1 = Woman("ChenRonghua",26) w1.get_birth()--->NiuHanYang is eating... NiuHanYang is piaoing.....20s......done. NiuHanYang is sleeping... man is sleeping ChenRonghua is born a baby....
1-4-2Man 和 Woman 都 继承了 People 既然都属于同一个父类,Woman 可以调用 Man 中的 piao 吗?class People:def __init__(self,name,age): self.name = name # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name) class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self): People.sleep(self) print("man is sleeping")class Woman(People):def get_birth(self):print("%s is born a baby...."%self.name) m1 = Man("NiuHanYang",222) m1.eat() m1.piao() m1.sleep() w1 = Woman("ChenRonghua",26) w1.get_birth() w1.piao()--->AttributeError: 'Woman' object has no attribute 'piao'男女不同的地方,所以才弄出两个子类,所以 Woman 是不可以调用 Man 的 就是因为有不同,所以才分别继承了父类
相关文章推荐
- 2015 5.16 C# 继承和多态
- 再谈javascript原型继承
- 继承
- SE24新建类步骤以及如何继承一个系统类的属性
- C++继承中的访问控制实例分析
- CppPrimer自学(3)公有继承
- php 的继承中需要注意的地方
- 多继承基类中有同名虚函数
- C++的继承,多继承,虚继承的对象分布的总结
- java基础总结九(继承、抽象类)
- 用公用继承方式 第五章第一题
- 多重继承下的类型转换
- 前端学习日记(七):css中伪元素选择器、级联、继承、颜色、长度与尺寸、字体样式的简单应用
- linux C++ 面向对象线程类(封装,继承,多态)
- 139邮箱JS的继承体系
- Maven之继承与聚合
- 代码块 继承思想
- java中的成员方法与成员变量的继承
- windows phone (13) 样式继承
- JAVASCRIPT面向对象(继承)第三章