python 3.x 学习笔记10 (析构函数and继承)
1.类变量的用途:
大家公用的属性,节省开销(内存)
2.析构函数
在实例释放和销毁的时候执行的,通常用于做一些收尾工作,如关闭一些数据库链接和打开的临时文件
3.私有方法
两个下划线开头,声明该方法为私有方法,不能在类地外部调用。
4.私有属性
两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。
5.
继承的时候重写构造函数要先将父类的所有参数写一遍加上子类变量,然后调用父类,再添加子类的实例化变量。
6.
python2.x 经典类是按深度有先来继承的,新式类是按广度有先来继承的。
python3.x 经典类和新式类都是统一按广度优先来继承的。
练习
1 #父类1 2 class Person(object): #新式写法 3 4 def __init__(self,name,age): 5 #构造函数 6 self.name = name #实例化变量(静态属性) ,作用域为实例化本身 7 self.age = age 8 self.friends = [] 9 10 def eat(self): # 类方法 功能(动态属性) 11 print('%s will eat something ! '%self.name) 12 13 def run(self): 14 print('%s will runing !'%self.name) 15 16 def sleep(self): 17 print('%s will sleep !'%self.name) 18 19 #父类2 20 class Relation(object): 21 def make_friends(self,obj): 22 print('%s make friend with %s'% (self.name,obj.name)) 23 self.friends.append(obj) #这里传的参数是obj,在这例题里 obj既是 w1 24 25 26 #子类 27 class Man(Person,Relation): #多继承 28 def __init__(self,name,age,money): #重写构造函数 29 #Person.__init__(self,name,age,money) #经典写法 30 super(Man,self).__init__(name,age) #新式写法,建议用这种写法 31 self.money = money 32 33 def piao(self): 34 print('%s is piaoing .......'% self.name) 35 36 37 #子类 38 class Woman(Person,Relation): #多继承 39 def piao(self): 40 print('%s is piaoing .......'% self.name) 41 42 m1 = Man('张三',20,10) 43 44 w1 = Woman('lili',21) 45 46 m1.make_friends(w1) 47 print(m1.friends[0].name) 48 print(m1.friends[0].age) 49 50 # m1.piao() 51 # m1.eat() 52 # m1.run() 53 # m1.sleep()