在看python的视频资源自学
学了一点后觉得还是写点东西好,以后自己回顾也有东西看
面向对象
1. _del_方法:
class dog:
def _del_(self):
print("over")
dog1=dog()
dog2=dog1
del dog1
print("啊")
这一段代码的输出是这样的
啊
over
然鹅当代码改为
class dog:
def _del_(self):
print("over")
dog1=dog()
dog2=dog1
del dog1
del dog2
print("啊")
输出结果就变成
over
啊
原因是系统在调用_del_方法之前有其他调用dog1的语句
(即引用计数大于0)
第一次的代码:
在dog1=dog()时引用计数为1
dog2=dog1时引用计数为2
下方del dog1后引用计数为1
再往下无语句调用dog1——系统退出程序——即引用计数为0——调用_del_函数
结论:在程序中引用计数为0(即无语句调用时或者被删除后)时,_del_函数会被自动调用
如何查看一个对象的引用计数呢?
代码为
import sys
sys.getrefcount(x)
使用方法
import sys
class X:
pass
x=X()
sys.getrefcount(x)
上述代码所得结果为2
但根据观察代码可知这个引用计数应该为1
查阅资料得知:
这个数=真实引用计数+1
在删除x对象后再测一次
即
del x
sys.getrefcount(x)
结果是name ‘x’ is not defined
so。。。
2.继承
创建不同类之后(如创建了A,B两个类)`
class A:
def eat(self):
print('吃饭')
class B:
def drink(self):
print('喝水')
如果A类中的功能,B类也同样有
那么可用继承的方法
class A:
def eat(self):
print('吃饭')
class B(A):
def drink(self):
print('喝水')
即在定义类B的时候在B后加个(A)
表示B是A的子类,A是B的父类
父类下是子类,可无线套娃
即
*class a
class b(a)
class c(b)
class d(c)
。。。
功能上,d能用a、b、c三个类的功能,还能有d类自己独有的功能
!!注意!!(“重写”功能)
子类中可以写一个与父类中功能名相同的功能来重新定义这个功能,程序执行时会优先考虑子类自己的功能
class a:
def eat(self):
print('吃东西')
class b(a):
def eat(self):
print('要恰饭的嘛')
意义:便于更改与更新功能
⭐调用被重写的原方法
方法一
class a:
def eat(self):
print('吃东西')
class b(a):
def eat(self):
print('要恰饭的嘛')
a.eat(self)
最后一行代码a.eat(self)即完成对父类中eat功能的调用
注意!!!:self不可省略
方法二
class a:
def eat(self):
print('吃东西')
class b(a):
def eat(self):
print('要恰饭的嘛')
super().eat()
同样也是最后一行代码完成对父类中eat功能的调用
但不同的是要调用super()功能来实现
优点为可省略self
^ ^嘻嘻
day1结束
2020/1/21/9:30