python基础-__init__引入继承、super、继承顺序
来源:互联网 发布:java utf-8转gbk乱码 编辑:程序博客网 时间:2024/06/17 02:00
- 由_init_引入继承
- 派生属性方法
- super使用
- 关于同名方法的调用
- 继承顺序
由_init_引入继承
class Animal: def __init__(self,name): self.name = name def eat(self): print('Animal is eating') self.breed += 10class Dog(Animal): def __init__(self, name, breed): Animal.__init__(self,name) self.breed = breed def eat(self): Animal.eat(self) print('dog is eating')snoopy = Dog('太白',500)print(snoopy.name,snoopy.breed)print("----------------")Animal.eat(snoopy)print(snoopy.breed)print("----------------")snoopy.eat()print(snoopy.breed)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/3.继承.py太白 500----------------Animal is eating510----------------Animal is eatingdog is eating520
派生属性、方法
派生属性 : 在自己的init方法里 使用父类的init方法 —— 指名道姓调用方法
派生方法 : 在子类中增加父类没有的
只要子类有,就有子类的
只要想用父类,Animal.eat(snoopy) 父类名.父类的方法(子类对象) 2.7经典类中
用子类的对象,调用父类的方法:
如果子类中没有这个方法,直接就使用父类的
如果子类中有同名方法:
# 经典类 指名道姓 类名.方法名(子类对象) 类内外一致
# 新式类 super方法 super(子类名,子类对象).方法名() 类内可以省略super的参数
super使用
class Animal: def __init__(self,name): print(self) self.name = name def eat(self): print("Animal eat")class Dog(Animal): def __init__(self,name,age): print(self) # super(Dog,self).__init__(name) super().__init__(name) self.age = age def eat(self): print("Dog eat")dog = Dog("dog",1)print(dog.age,dog.name)#super外部用print("------super外部用---------")super(Dog,dog).eat()Animal.eat(dog)dog.eat()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py<__main__.Dog object at 0x02D90830><__main__.Dog object at 0x02D90830>1 dog------super外部用---------Animal eatAnimal eatDog eat
关于同名方法的调用
class Foo: def __init__(self): self.func() def func(self): print(self) print("foo")class son(Foo): def func(self): print(self,"son") print("son") passs = son()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py<__main__.son object at 0x039D08B0> sonsonProcess finished with exit code 0
我们修改代码如下:
class Foo: def __init__(self): self.func() def func(self): print(self) print("foo")class son(Foo):pass # def func(self): # print(self,"son") # print("son")s = son()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py<__main__.son object at 0x031F0850>fooProcess finished with exit code 0
继承顺序
经典类和新式类的多继承问题,继承顺序问题
经典类 : 博大精深 所以经典类就是深度优先
新式类 :广度优先
py3 —— 广度优先
py2 —— 区分经典类、新式类
class D(object): pass def f(self): print('D')class B(D): pass def f(self): print('B')class C(D): pass def f(self): print('C')class A(B,C): pass def f(self): print('A')a = A()a.f()print(A.mro()) #新式类:查看继承顺序
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/4.钻石继承问题.pyA[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class 'object'>]Process finished with exit code 0
阅读全文
0 0
- python基础-__init__引入继承、super、继承顺序
- __init__(self),self,super,继承杂谈
- Python super继承详解
- Python中的__init__()方法及其继承
- python 继承中的self和__init__
- python普通继承和super继承
- python super 继承
- Python多继承顺序
- python继承顺序
- Python(3) python __init__()初始化及继承的实现
- super、继承
- 继承、super
- Python基础14--继承
- Python基础-多重继承
- Python 5) 基础 继承
- java基础-----访问权限,继承,super
- python继承中super的问题
- Python 类继承,__bases__, __mro__, super
- java基础
- 关于android刷机包OTA包
- Idea 一键格式化代碼: Ctrl+Alt+L
- 依赖注入简单案例
- android 4.4 电池电量显示分析(低电量提醒与电池图标)Java 层
- python基础-__init__引入继承、super、继承顺序
- NOIP2017提高组 Day2T2宝藏 状压DP
- 【1】在Ubuntu上为Android系统编写Linux内核驱动程序
- Python 运算符
- 物联网不是趋势,是发展关键?
- 【鸟哥的Linux私房菜】vim程序编辑器
- 因web.xml配置问题而无法启动Tomcat—(SSH整合)
- ubuntu参数的形式
- JavaScript 变量作用域和声明提升