这两者也是Python内建,无需自界说。
- class Foo:
- pass
- obj = Foo()
- print(obj.__module__)
- print(obj.__class__)
运行功效:
- main
4. del()
析构要领,当工具在内存中被开释时,自动触发此要领。
注:此要领一样平常无须自界说,由于Python自带内存分派和开释机制,除非你必要在开释的时辰指定做一些举措。析构函数的挪用是由表明器在举办垃圾接纳时自动触发执行的。
- class Foo:
- def __del__(self):
- print("我被接纳了!")
-
- obj = Foo()
- del obj
5. call()
假如为一个类编写了该要领,那么在该类的实例后头加括号,可会挪用这个要领。
注:结构要领的执行是由类加括号执行的,即:工具 = 类名(),而对付call() 要领,是由工具后加括号触发的,即:工具() 可能 类()()
- class Foo:
- def __init__(self):
- pass
- def __call__(self, *args, **kwargs):
- print('__call__')
- obj = Foo() # 执行 __init__
- obj() # 执行 __call__
可以用Python内建的callable()函数举办测试,判定一个工具是否可以被执行。
- callable(Student())
运行功效:
- True
6. dict
列出类或工具中的全部成员!很是重要和有效的一个属性,Python自建,无需用户本身界说。
- 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__)
7. str()
假如一个类中界说了str()要领,那么在打印工具时,默认输出该要领的返回值。这也是一个很是重要的要领,必要用户本身界说。
下面的类,没有界说str()要领,打印功效是:
- class Foo:
- pass
- obj = Foo()
- print(obj)
- 界说了__str__()要领后,打印功效是:'jack'。
- class Foo:
- def __str__(self):
- return 'jack'
- obj = Foo()
- print(obj)
8、getitem__()、_setitem_()、__delitem()
取值、赋值、删除这“三剑客”的套路,在Python中,我们已经见过许多次了,好比前面的@property装饰器。
Python中,标识符后头加圆括号,凡是代表执行或挪用要领的意思。而在标识符后头加中括号[],凡是代表取值的意思。Python计划了getitem()、setitem()、delitem()这三个非凡成员,用于执行与中括号有关的举措。它们别离暗示取值、赋值、删除数据。
也就是如下的操纵:
- 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'] # 自动触发执行 __getitem__
- obj['k2'] = 'jack' # 自动触发执行 __setitem__
- del obj['k1'] # 自动触发执行 __delitem__
9. iter() (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|