析构:

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)

最新文章

  1. GiuHub 使用
  2. Android 中BaseActivty
  3. 提升WordPress站点速度的八个建议
  4. javascript的词法分析
  5. verilog简易实现CPU的Cache设计
  6. LightOj_1317 Throwing Balls into the Baskets
  7. 构建微服务:Spring boot
  8. 《zip命令》-linux命令五分钟系列之九
  9. [转] linux 信号量之SIGNAL
  10. SSH-Struts(三)—ActionForm
  11. 页面跳转后样式丢失js失效
  12. XHTML 是以 XML 格式编写的 HTML
  13. BootStrap教程完整版
  14. 《高级软件测试》JIRA使用手册(二)JIRA安装
  15. python 实现rsa 的加密解密存读取(PEM格式证书)【转发】
  16. Spring Boot @Autowired 没法自动注入的问题
  17. mysql-查询存在主表但是不存在副标的数据
  18. [c/c++] programming之路(3)、转义字符及内存
  19. Linux下open与fopen的区别
  20. 【洛谷 P3690】 【模板】Link Cut Tree (动态树)

热门文章

  1. JFreeChart基础(1) (转自 JSP开发技术大全)
  2. BS与CS的联系与区别。
  3. 学习Flash Builder编程的准备工作
  4. HDU 4850 Wow! Such String!
  5. 大神给你分析HTTPS和HTTP的区别(转)
  6. bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【Floyd】
  7. yii int
  8. 笔记本 windows 10 安装
  9. hdu 4104 Discount
  10. 19 C#循环语句的跳过和中断 continue和break