1 __doc__:python自建,无需定义。说明文档和信息
class Foo: """描述类信息,可自动被收集""" def func(self): pass print (Foo.__doc__) 描述类信息,可自动被收集
2 __init__():实例化方法,通过类创建实例,自动触发执行
3 __module__ 和 __class__:前者标识当前操作的对象在属于哪个模块;后者标识当前操作的对象属于哪个类
class Foo: pass obj = Foo() print(obj.__module__) print(obj.__class__) __main__ <class '__main__.Foo'>
4 __del__():析构方法,当对象在内存中被释放时,自动触发此方法,无序定义,除非指定动作
class Foo: def __del__(self): print("我被回收了") obj = Foo() del obj 我被回收了
5 __call__():如果为一个类编写了该方法,那么在该类的实例后边加括号,可调用此方法。一般构造函数通过对象=类名()执行,但__call__()是有对象加括号后触发,即对象()或者类()。
通过callable()函数测试对象可否被执行。
class Foo: def __init__(self): pass def __call__(self,*args,**kwargs): print('__call__') obj = Foo() obj() __call__
6 __dict__:列出类或者对象中所有成员。自建无序定义。
class Province: country = 'China' def __init__(self,name,count): self.name = name self.count = count def func(self,*args,**kwargs): print('func') #获取类的成员 print(Province.__dict__) #获取对象obj1的成员 obj1 = Province('HeBei',10000) print(obj1.__dict__) #获取对象obj2的成员 obj2 = Province('HeNan',3888) print(obj2.__dict__) {'__module__': '__main__', 'country': 'China', '__init__': <function Province.__init__ at 0x0000022F4633DA60>, 'func': <function Province.func at 0x0000022F4633DAE8>, '__dict__': <attribute '__dict__' of 'Province' objects>, '__weakref__': <attribute '__weakref__' of 'Province' objects>, '__doc__': None} {'name': 'HeBei', 'count': 10000} {'name': 'HeNan', 'count': 3888}
7 __str__()
8 __getitem__(),__setitem__(),__delitem__():取值,赋值,删除。Python中标识符后加括号,代表调用。加中括号[],代表取值。三成员用于执行与中括号有关的动作。
a = 标识符[] : 执行__getitem__方法 标识符[] = a : 执行__setitem__方法 del 标识符[] : 执行__delitem__方法
如果有一个类同时定义了这三个魔法方法,那么这个类的实例的行为看起来就像一个字典一样,如下例所示:
class Foo: def __getitem__(self,key): print('__getitem__',key) def __setitem__(self,key,value): print('__setitem__',key,value) def __delitem__(self,key): print('__delitem__',key) obj = Foo() result = obj['k1'] obj['k2'] = 'jack' del obj['k1'] __getitem__ k1 __setitem__ k2 jack __delitem__ k1
9 __iter__():
10 __len__()
11 __repr__();与__str__()的区别:前者返回开发者看到的字符,后者返回用户看到的字符串。为调试服务,通常代码一样。
12 __add__;__sub__;__mul__;__div__;__mod__;__pow__
13 __author__
14 __slots__:python可以在定义类或实例化后,给类或者对象继续添加随意个或任意类型的变量或方法,动态语言特性。如果限制实例可以添加的变量,使用__slots__。
仅对当前类有效,对子类无效。
def print_doc(self): print('haha') class Foo: __slots__ = ('name','age') pass obj1 = Foo() obj2 = Foo() #动态添加实例变量 obj1.name='jack' obj2.age = 18 obj1.sex = 'male' #会弹出错误 #动态添加实例方法,__slots__无法限制给类添加方法 Foo.show = print_doc obj1.show() obj2.show()
                    
                
                
            
        
浙公网安备 33010602011771号