Python——__dict__属性

在Python中一些皆为对象,__dict__属性中保存了对象所有可写的属性及其对应值的字典。

本文主要介绍类和对象、父类和子类的__dict__有什么区别。

1. 类和对象__dict__

定义类和对象如下:

# 类
class Sample(object):
    a = 1
    b = 2
    def __init__ (self):
        self.name = 'abc'
        self.a = 3

    def test(self):
        pass

    def _test(self):
        pass

    def __test(self):
        pass
    
    @staticmethod
    def static_test(self):
        pass
 
    @classmethod
    def class_test(self):
        pass
# 对象
sample1 = Sample()

分别打印类和对象的__dict__输出如下:

# 类
print(Sample.__dict__)
# 结果↓
'__module__': '__main__', 'a': 1, 'b': 2, '__init__': <function Sample.__init__ at 0x7fdda287a680>, 'test': <function Sample.test at 0x7fdda287a7a0>, '_test': <function Sample._test at 0x7fdda287ac20>, '_Sample__test': <function Sample.__test at 0x7fdda287a290>, 'static_test': <staticmethod object at 0x7fdda277f510>, 'class_test': <classmethod object at 0x7fdda277f890>, '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None}

# 对象
print(sample1.__dict__)
# 结果↓
{'name': 'abc', 'a': 3}

从中可以得到几个观察:

  1. __dict__中包含了类变量、在类中定义的所有方法。而实例变量不包含在内。需要注意的一点是,私有函数(以双下划线开头的函数)被改写成了_类名+函数名的形式
  2. 对象__dict__中包含里实例变量(即以self开头的变量)。

2. 父类和子类__dict__

# Sample类的子类
class Sample_Child(Sample):
    a = 4
    def __init__(self):
      self.name = 'abc_child'
    
    def test(self):
      pass

子类的类__dict__和对象__dict__:

# 子类 __dict__
print(Sample_Child.__dict__)
# 结果↓
{'__module__': '__main__', 'a': 4, '__init__': <function Sample_Child.__init__ at 0x7fdda2895f80>, 'test': <function Sample_Child.test at 0x7fdda2797b90>, '__doc__': None}

# 子类对象 __dict__
print(Sample_Child().__dict__)
# 结果
{'name': 'abc_child'}

得到的观察:

  1. 子类的__dict__中不包含父类__dict__的元素
  2. 子类的对象__dict__也不包含父类对象的__dict__

3. 总结

  1. __dict__中包含了类变量、在类中定义的所有方法。而实例变量不包含在内。
  2. 对象__dict__中包含里实例变量(即以self开头的变量)。不包含类变量。
  3. 子类__dict__中不包含父类__dict__的元素。
  4. 子类对象__dict__也不包含父类对象的__dict__。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值