"""
-----------------------------------------------------
python 中 object VS type
object与type 共生关系,必须同时存在
面向对象中有两关系:
Ⅰ.父子关系-->继承关系(__bases__可查看继承关系)
Ⅱ.类型与实例的关系,表现为类型的实例化.(__class__属性来查看其所属类型)type函数也行
object
<class 'object'>
type
<class 'type'>
object 是父子关系的顶端,所有的数据类型的父类都是他
type 是类型实例关系的顶端,所有对象都是他的实例
>>>>>>>>>>>>>>>>>>>
object.__class__
<class 'type'>
type.__base__
<class 'object'>
>>>>>>>>>>>>>>>>>>>
list.__base__
<class 'object'>
list.__class__
<class 'type'>
>>>>>>>>>>>>>>>>>>>
mylist=[1,2,3]
mylist.__class__#实例
<class 'list'>
mylist.__base__
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'list' object has no attribute '__base__'
普通类的父类是object,object的父类没有了,object是type的实例化
type的父类是object,type是type的实例化
敲黑板划重点,记住这句话:object是一个type的实例,type继承自object
--------------------------------------------------------------
"""
super方法
'''
super方法:主要用于子类中继承父类
------------------------
class SuperClass():
def act(self):
print("SuperClass")
class SubClass(SuperClass):
def act(self):
SuperClass.act(self)
print("SubClass")
sub=SubClass()
sub.act()
---------------------------------------
class SuperClass():
def act(self):
print("SuperClass")
class SubClass(SuperClass):
def act(self):
super().act()
print("SubClass")
sub=SubClass()
sub.act()
----------------------------------------------
class SuperClass():
def act(self):
print("SuperClass")
class SubClass(SuperClass):
def act(self):
print("SubClass")
sub=SubClass()
super(SubClass,sub).act()
''''''
super()在多继承中的应用
class A:
def act(self):
print("Class A")
class B:
def act(self):
print("Class B")
class C(B,A):
def act(self):
super().act()
#方法遍历顺序: C->B->A
c=C()
c.act()
------------------------
class X:
def m1(self):
print("X")
class Y:
def m1(self):
print("Y")
class Z(X):
def m1(self):
super().m1()
z=Z()
z.m1()
print("change X to Y")
# 设置z的父类为Y
Z.__bases__=(Y,)
z.m1()
# X
# change X to Y
# Y
'''
装饰器回顾
"""
高阶函数与装饰器
#统计函数运行时间
import time
print(time.time())
print(time.asctime())
# 1597211267.6916356
# Wed Aug 12 13:47:47 2020
import time
# 装饰器
def timer(fun):
def inner():
start=time.time()
fun()
end=time.time()
print(end-start)
return inner
@timer
def fun():
lis=[]
for i in range(1,1000000):
lis.append(i)
if __name__ == '__main__':
timer(fun())
""""""
def fun1():
string="python!"
def fun2():
print(string)
def fun3():
print("fun3()")
return fun2,fun3
fun1()[0]()
fun1()[1]()
"""
"""
import time
# 装饰器
def timer(fun):
def inner(n):
start = time.time()
fun(n)
end = time.time()
print(end - start)
return inner
@timer
def fib(n):
a, b = 0, 1
while a <= n:
a, b = b, a + b
if __name__ == '__main__':
pass
print("a1".isalpha())
"""
文章目录多继承type与objectsuper方法装饰器回顾类中的特殊方法类中的特殊方法多继承'''python2:深度优先python3:广度优先多继承 深度遍历 广度遍历 Python2: 多继承时 之前,经典类继承方式,采取深度优先原则 class className(object): pass 之后,新式类继承方式,广度优先原则 class class