python字典实例化对象_理解Python中的类和实例对象的命名空间字典

我们知道。模块可以通过内建属性_ _dict_ _显示模块的命名空间,实例和对象也存在同样的属性。

>>> class Namespace():

... def function(self):

... self.name = 'linuxer'

...

>>> example = Namespace()

>>> example.name

Traceback (most recent call last):

File "", line 1, in

AttributeError: Namespace instance has no attribute 'name'

>>>

>>> example.__dict__

{}

>>> example.function()

>>> example.name

'linuxer'

>>> example.__dict__

{'name': 'linuxer'}

>>>

在上面的交互模式会话中,创建了一个类Namespace,实例化一个实例example,当我尝试访问实例的name属性时,发现不能正常访问,报 属性错误:Namespace的实例没有name这个属性。这个时候通过访问实例的__dict__属性,发现这个字典什么内容也没有,这是为什么呢?原因在于self.name虽然是实例的属性,但是他是一个方法内部的变量,而在我们没有调用这个方法之前,他是不会存在于内存中的,只有当实例调用这个方法之后,才会存在于内存中,我们可以用id()证明这一点:

>>> test = Namespace()

>>> id(test.name)

Traceback (most recent call last):

File "", line 1, in

AttributeError: Namespace instance has no attribute 'name'

>>> test.function()

>>> id(test.name)

140169321568464

>>>

从上面的会话中,我们可以看到,调用前,使用id(),会出现错误提示,调用之后,再使用id(),会出现一串数字,这个就是name属性在内存中的地址!因此,我们可以判断:方法或函数未调用之前,他们是不会存在于内存中的,包括方法中的其他变量。方法调用之后,我们再使用example.__dict__之后,就可以看到字典中有内容存在,并且是属性与其值的对应。

再看一个交互会话:

>>> Namespace.__dict__

{'function': , '__module__': '__main__', '__doc__': None}

>>>

>>> Namespace.value = 'LinuxerRocky'

>>> Namespace.__dict__

{'function': , '__module__': '__main__', '__doc__': None, 'value': 'LinuxerRocky'}

example实例查看命令空间字典后,已经存在了数据。此时,我们再访问类Namespace的命名空间字典,发现没有name属性。然后我们用创建一个类属性value,再查看__dict__属性,发现存在了类的命名空间字典中存在了value属性。在这里额,可以得出另一个结论:属性是位于实例的属性命名空间字典中的。而不是类的空间命名字典中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值