面向对象编程_python 类的一些常见的特殊方法

话不多说直接上代码 和注释:

class A:
    def __init__(self,a,b):
        self.a =a
        self.b =b
# 内部定义__call__ 方法,通过 对象() 会在自动执行__call__ 方法 ,该方法支持返回一个值 def __call__(self, *args, **kwargs): print('对象()执行') return args,kwargs # 内部定义__getitem__方法,通过 对象[] 会在自动执行__getitem__ 方法 ,该方法支持返回一个值 def __getitem__(self, item): print('该方法是对象可以通过对象[]执行,并返回一个值') return item # 内部定义__setitem__方法,通过 对象['key'] = value 会在自动执行__setitem__ 方法 ,该方法不支持返回值 def __setitem__(self, key, value): print(key,value,33333333) # 内部定义__delitem__方法,通过 del 对象[key] 会在自动执行__delitem__方法 ,该方法不支持返回值 def __delitem__(self, key): print(key) return 'delitem 支持返回值' # 内部定义__add__方法,通过 对象1+对象2 会在自动执行__add__方法 ,该方法支持返回值 def __add__(self, other): print(self.a+other.b) # 内部定义__enter__ /__exit__ 方法,通过 with 对象 会在自动执行__enter__ /__exit__ 方法 ,该__enter__方法支持返回值 def __enter__(self): print('进入') return '进入后返回666' def __exit__(self, exc_type, exc_val, exc_tb): print('出去') # __init__ 类名() 会自动执行该方法 f = A(1,2) # 类内定义一个方法 __call__ ,实现 实例对象() 自动执行该方法,且支持返回值 res = f(33,44,k = 1) print(res) # 类内定义一个方法 __getitem__ ,实现 实例对象[] 自动执行该方法,且支持返回值 res1 =f[1] print(res1) # 类内定义一个方法 __setitem__ ,实现 实例对象['xx'] = 值 自动执行该方法,不支持返回值 # 这里 setitem 传参一一对应 key =['我是setitem'] ,value = 11111 f['我是setitem']=11111 # 类内定义一个方法 __delitem__ ,实现 实例对象 del 对象[] 自动执行该方法,不支持返回值 del f['我是del'] # 类内定义一个方法 __add__ ,实现 两个实例对象 通过+好 自动执行该方法,支持返回值 f2 = A(22,33) f+f2 # 类内定义一个方法 __enter__ /__exit__ 方法, ,实现 实例对象 通过 with 对象: 会自动执行这两个方法,并且__enter__ 方法内支持返回值 with f as a: print(a) print('进入代码后的中间逻辑,处理了数据{}'.format(a)) # 创建对象的时候 真正的构造方法 __new__ , # 创建对象的时候 python 基础类object __new__ 创建一个当前类的空的对象,然再通过 __init__方法给这个空对象初始化数据 class B: def __init__(self,name): print('我是init方法') self.name = name def __new__(cls, *args, **kwargs): print('我是new方法') return object.__new__(cls) b = B('TONY')

 

posted @ 2021-11-08 21:09  昆虫白  阅读(60)  评论(0)    收藏  举报