1 # 多继承
2 class A:
3 def show(self):
4 print('AAAA')
5
6 class B:
7 def fun(self):
8 print('BBBB')
9
10 class C(B,A):
11 pass
12
13 x = C()
14
15
16 # 类的特殊方法
17 '''
18 类属性:
19 __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
20 __doc__ :类的文档字符串
21 __name__: 类名
22 '''
23 x = 'a\nb'
24 #print(repr(x))
25 #实例调用:
26 '''
27 __init__ 初始化
28 __repr__ c1
29 __str__ print (c1 )(如果类里面先定义了__repr__的话print x时也会返回对应的
30 __call__ c1() 使实例可被调用
31 '''
32 class Rectangle:
33 def __init__(self,width,height):
34 self.width = width
35 self.height = height
36 def __str__(self):
37 return '宽为%s,高为%s'%(self.width,self.height)
38 def __repr__(self):
39 return '面积为%s'%self.area()
40 def __call__(self):
41 return '哈哈哈 '
42 def area(self):
43 return self.width*self.height
44 def __add__(self,other):
45 if isinstance(other,Rectangle):
46 return self.area()+other.area()
47
48 c1 = Rectangle(3,4)
49 c2 = Rectangle(5,6)
50 # 运算符魔法方法:
51 '''
52 __add__(self,other) x+y
53 __sub__(self,other) x-y
54 __mul__(self,other) x*y
55 __mod__(self,other) x%y
56 __iadd__(self,other) x+=y
57 __isub__(self,other) x-=y
58 __radd__(self,other) y+x
59 __rsub__(self,other) y-x
60 __imul__(self,other) x*=y
61 __imod__(self,other) x%=y
62 '''
63 # 装饰器
64 '''
65 @property 装饰过的函数返回的不再是一个函数,而是一个property对象
66 装饰过后的方法不再是可调用的对象,可以看做数据属性直接访问。
67 @staticmethod 把没有参数的函数装饰过后变成可被实例调用的函数,
68 函数定义时是没有参数的。
69 @classmethod 把装饰过的方法变成一个classmethod类对象,既能能被类调用又能被实例调用。
70 注意参数是cls代表这个类本身。而是用实例的方法只能被实例调用。
71 '''
72 class Rectangle:
73 def __init__(self,width,height):
74 self.width = width
75 self.height = height
76 @property
77 def area(self):
78 return self.width*self.height
79 @staticmethod
80 def fun():
81 return 'xxxxxx'
82 @classmethod
83 def show(cls):
84 print(cls)
85 return 'YYYY'
86 c1 = Rectangle(3,4)
87 def fun1(ff):
88 def fun2(y):
89 return ff(y)+100
90 return fun2
91
92 @fun1 #ff = fun1(ff) # x=ff
93 def ff(y):
94 return y*y
95
96 def filterarg(x):
97 def fit(*arg):
98 if len(arg) == 0:
99 return 0
100 for i in arg:
101 if not isinstance(i,int):
102 return 0
103 return x(*arg)
104 return fit
105
106 #@filterarg
107 def sums(*arg):
108 return sum(arg)
109
110 filterarg(sums)(3,4,5)
111
112 @filterarg
113 def average(*arg):
114 print(arg)
115 return sum(arg)/len(arg)