python弱引用_python-类型与弱引用的行为-无法理解

x .__ class__和type(x)不相等.

type(x)的根源为typeobject.c,并将返回真正的类型ob_type.

/* Special case: type(x) should return x->ob_type */

虽然x .__ class__只是一个属性查询.等效于object .__ getattribute __(x,’__class__’),除非已重新定义属性查找.

对象的“ __class__”是数据描述符,该描述符也在typeobject.c中定义.其getter也返回ob_type.因此,在大多数情况下,x .__ class__和type(x)返回相同的内容.

但是弱代理_PyWeakref_ProxyType故意定义了自己的proxy_getattr.这就是为什么y .__ class__与您的情况下的type(y)不同.

在下面的实验中,我们可以达到相同的效果.

class A(object):

pass

class C(object):

def __getattribute__(self, name):

if name == '__class__':

return A

return object.__getattribute__(self, name)

>>> c = C()

>>> c.__class__

>>> type(c)

此外,在此示例中,isinstance(c,A)和isinstance(c,C)均成立.由于isinstance将首先检查ob_type的相等性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值