python 特殊属性和方法
在Python中有一些__xxx__
的变量或者函数名,这些是有特殊用途的。
特殊属性:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。object.__dict__, 将对象中封装的所有内容通过字典的形式返回。
class.__bases__, 类对象的基类的元组。
definition.__name__, 类,函数,方法,描述符或生成器实例的名称。
class.__mro__, 此属性是解析基类时类的元组。
class Foo(object): def __init__(self): self.name = 'Alice' self.age = 28 class Fo(Foo): pass f = Fo() print(f.__dict__) #{'name': 'Alice', 'age': 28} print(Fo.__bases__) #(<class '__main__.Foo'>,) print(Fo.__name__) #Fo print(Fo.__mro__) #(<class '__main__.Fo'>, <class '__main__.Foo'>, <class 'object'>)
特殊方法:
__new__(cls, *args, **kws), 创建类的新实例时调用它,参数cls代表当前类,返回值是一个新的对象实例。
__init__(self), 在创建对象实例之后使用,接受一个参数self,就是__new__返回的对象实例;然后对实例进行一些初始化的操作;
class Foo(object): def __new__(cls, *args, **kwargs): cls.name = 'Foo_class' #可以设置类属性 print('new_method') return object.__new__(cls, *args, ** kwargs) #cls参数是创建当前类的实例 def __init__(self): #self是new创建的实例 self.age = 22 #设置一些初始化属性 print('init_method') #不需要有返回值 f = Foo() #new_method print(Foo.name) #Foo_class f = Foo() #init_method print(f.age) #22
__str__(self), 对象进行print()操作时调用此方法,返回值必须是一个字符串对象。
__call__(cls, *args, **kws), 将对象被当作函数调用时,如果定义了这个方法,则调用此方法。
__del__(self), 当对象即将被销毁时调用,不再被使用才会被销毁,也成为析构函数。
class Foo(object): def __str__(self): #被print()时执行 return 'this is a special method test script' def __call__(self, *args, **kwargs): #被()时执行 print('instance is called') def __del__(self): #销毁时执行 print('deleted') f = Foo() print(f) #this is a special method test script f() #instance is called #f重新赋值,Foo不再被使用,则Foo被销毁 f = '123' #deleted
__getitem__(self, item), __setitem__(self, key, value), __delitem__(sef,key), 可以使对象进行切片(slice对象)和索引;
class Foo(object): def __init__(self): self.info_list = list(range(0,10)) def __getitem__(self, item): return self.info_list[item] def __setitem__(self, key, value): self.info_list[key] = value def __delitem__(self, key): self.info_list.pop(key) f = Foo() print(f[0:3:2]) #[0, 2] f[2] = '28' print(f[2]) #28 del f[5] print(f[5]) #6
__iter__(self), 类中有__iter__方法就认为是可迭代对象,此方法返回一个迭代器对象;
class Fib: def __iter__(self): #result = (x for x in range(0,10)) result = iter([11,22,33]) return result f = Fib() for i in f: print(i) #运行结果 11 22 33

更多精彩