面向对象-05

'''
特殊成员:

1.类名() 自动执行__init__方法
def __init__(self, a1, a2):
self.a1 = a1
self.a2 = a2
obj = Foo(1, 2)

2.对象() 自动执行__call__方法
def __call__(self, *arg, **kwargs):
print(11111,args, kwargs)

obj(6, 1, 2, k1 = 231)

3.对象[] 自动执行__getitem__方法
def __getitem__(self, item):
print(item)
return 23
obj['yu'] #会打印出'yu',且返回23

4.对象['xx'] = 11 自动执行__setitem__方法
def __setitem__(self, key, value):
print(key, value)

obj['k1'] = 123 #结果为: k1 123 此方法相当于是用字典的方法进行传参,但生成的却不是字典.无返回值!

5.del 对象[xx] 自动执行__delitem__方法
def __delitem__(self, key):
print(key)

del obj['ww'] #结果为: ww.这么写他会自动给你把'ww'传进去.无返回值!

6.对象+对象 自动执行__add__方法
def __add__(self, other):
return self.a1 + other.a1

ret = obj1 + obj2 #对象之间当有add方法时,也可进行相加.且不仅支持加法,剪发乘法都可以.

7.with 对象 #此方法像打开文件一样,打开一个对象.
def __enter__(self): #enter可以有返回值
print(123)
return 999

def __exit__(self, exc_type, exc_val, exc_tb):
print(456)

obj = Foo(1, 2)
with obj:
print('中间执行的代码')
结果为: 123 中间执行代码 456
#当遇到'with 对象',这种语句,系统会自动执行__enter__方法,然后退出时执行__exit__方法.当对象下有
代码时,会在执行__exit__方法前,执行对象下的代码

8.真正的构造方法
class Foo(object):
def __init__(self, a1, a2):
print(123)

# new方法是给当前类创建了一个空对象,而init方法则是给这个空对象添加属性.因此我们一般称new方法为'构造方法',init为'实例化方法'
def __new__(cls, *args, **kwargs):
print(456)
return object.__new__(cls) #new方法必须有返回值,且返回值是固定的,其中cls表示当前类

obj = Foo(1, 2) #创建对象时是先执行new方法的,new方法不执行,init方法是无法继续执行的,所以说要是我就不会写new方法.









'''
posted @ 2020-08-26 19:15  骑着旺财上前线  阅读(90)  评论(0编辑  收藏  举报