如果我们比较通过将dir()内置应用于对象超类生成的列表和'dummy',无体类,例如
class A():
pass
Run Code Online (Sandbox Code Playgroud)
我们发现A类有三个('__dict__', '__module__' and '__weakref__')在对象类中不存在的属性.
A类从哪里继承这些附加属性?
该__dict__属性由内部代码创建type.__new__.班级的元类可能影响最终的内容__dict__.如果您正在使用__slots__,则没有__dict__属性.
__module__在编译类时设置,因此实例从类继承此属性.您可以通过执行测试inst.__module__ is cls.__module__(给定inst是实例cls)来验证这一点,也可以通过修改cls.__module__和观察来inst.__module__反映此更改.
(你也可以做一些愚蠢的事情,比如设置inst.__module__不同的值cls.__module__.不确定为什么这不是readonly属性.)
__weakref__是在实例时创建的; AFAIK完全由内部CPython对象创建系统控制.此属性仅对存在于实例object子类-为的示例性实例中int,list,set,tuple无__weakref__属性.
在解释这个解释时,请记住这class C:相当于class C(object):Python3.对于Python2,plain class C:将生成没有__weakref__(或从object实现中获取的许多其他属性)的实例 .
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |