Python面向对象,析构继承多态
析构:
def __del__(self):
print("del..run...")
r1 = Role("xx")
del r1
结果打印del..run...
析构函数在实例被销毁的时候执行__del__
做程序的收尾工作
名字r1被删除后,垃圾回收机制会将对象清空
就执行了__del__函数
继承1
对父类的功能进行扩展而无需重写
* 多级继承,一般三层
父--子--孙--..
* 多重继承 class Teacher(SchoolMember,School)用的不多
实现继承和接口继承
实现不需要再写父类的方法,接口继承需要实现
继承的写法
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
self.sex="normal"
def talk(self):
print("person is talking..")
class BlackPerson(Person):
def __init__(self,name,age,strength):
Person.__init__(self,name,age)
self.strength=strength
def talk(self):
print("blackperson is talking...")
def walk(self):
print("blackperson is walking...")
class WhitePerson(Person):
pass
b = BlackPerson("bolt",30,"strong")
print(b.name,b.age,b.sex,b.strength) # bolt 30 normal strong
talk方法重写了,并添加了walk方法。
子类继承父类的构造函数,构造的时候必须传参数
要给子类加特殊的参数怎么办?不完全覆盖父类构造方法,先继承再重构
可以看出不仅构造方法,其他方法也可以这样在父类方法基础上增加功能
def __init__(self,name,age,strength):
Person.__init__(self,name,age) #经典类写法
super(Person,self).__init__(name,age) #新式类写法
继承2
__dict__:类的属性全放字典里
==================新式类和经典类===================统一用新式类
新式类写法
class Person(object):
super...
经典类写法
class Person:
ParentClass.__init__
新式类跟经典类不光super的区别还有
多继承时 继承顺序的区别
现在主要写的是新式类
例如 B继承A,C继承A,D继承BC
新式类继承从左到右 BCA广度查询 ,
Python3里不论新式类还是经典类继承时都是广度查询
python2里经典类是深度,新式类是广度
===============================================================
多态
继承的目的————代码重用
多态的目的————接口重用
f = Father()
s = Son()
s = f
Python中不直接支持多态,但可以间接实现
class Animal:
def __init__(self,name):
self.name = name
def talk(self):
raise NotImplementedError("subclass must implement abstract method")
a = Animal("aaa")
a.talk() #报错NotImplementError class Cat(Animal):
def talk(self):
print("miao..")
class Dog(Animal):
def talk(self):
print("wang...")
d = Dog()
c = Cat()
不关注是哪个实例,用一个方法调用,
Animal.talk(c) 装哪个对象,就用哪个对象的talk方法,只能按下面这种
def animal_talk(obj):
obj.talk()
animal_talk(d)
animal_talk(c)
最新文章
- GiuHub 使用
- Android 中BaseActivty
- 提升WordPress站点速度的八个建议
- javascript的词法分析
- verilog简易实现CPU的Cache设计
- LightOj_1317 Throwing Balls into the Baskets
- 构建微服务:Spring boot
- 《zip命令》-linux命令五分钟系列之九
- [转] linux 信号量之SIGNAL
- SSH-Struts(三)—ActionForm
- 页面跳转后样式丢失js失效
- XHTML 是以 XML 格式编写的 HTML
- BootStrap教程完整版
- 《高级软件测试》JIRA使用手册(二)JIRA安装
- python 实现rsa 的加密解密存读取(PEM格式证书)【转发】
- Spring Boot @Autowired 没法自动注入的问题
- mysql-查询存在主表但是不存在副标的数据
- [c/c++] programming之路(3)、转义字符及内存
- Linux下open与fopen的区别
- 【洛谷 P3690】 【模板】Link Cut Tree (动态树)
热门文章
- JFreeChart基础(1) (转自 JSP开发技术大全)
- BS与CS的联系与区别。
- 学习Flash Builder编程的准备工作
- HDU 4850 Wow! Such String!
- 大神给你分析HTTPS和HTTP的区别(转)
- bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【Floyd】
- yii int
- 笔记本 windows 10 安装
- hdu 4104 Discount
- 19 C#循环语句的跳过和中断 continue和break