Python对象实例中的dict不包含该类的方法

时间:2019-04-03 08:24:09

标签: python class dictionary

创建对象的实例时,其字典不包含类方法。一个例子是

    class A(object):
        def __init__(self, value):
            self.value = value
        def some_func(self): pass
    instance = A('some_value')
    print(instance.__dict__) #prints { 'value':'some_value }

为什么它也不包含方法。我知道打印A.__dict__将打印包含该函数的mappingproxy,但是对于A的实例不会发生。

我尝试研究如何映射类的实例方法。如果使用dict完成此操作。我确实知道实例方法还具有字典和其他预定义的属性。

class A(object)
    def __init__(self, value):
        self.value = value
    def some_func(self): pass
instance = A('this')
instance.__dict__ # will print {'value':'some_value'}
A.__dict__ # will print a mapping proxy

我希望结果instance.__dict__将包含所有方法和属性的映射,作为键,值对。

1 个答案:

答案 0 :(得分:2)

方法是类的方法,而不是实例的方法。

呼叫instance.some_func()时,实际上是在呼叫A.some_func(instance)

为说明起见,我向A添加了一个属性(classattr ='foo'):

class A:

    classattr = 'foo'

    def __init__(self, value):
        self.value = value

    def some_func(self):
        return 1


instance = A('this')
print(f'instance dict : {instance.__dict__}')  # will print {'value':'some_value'}
print(f'class dict : {A.__dict__}')  # will print a mapping proxy

该类的属性在实例中找不到。字典 ::

instance dict : {'value': 'this'}
class dict : {'__module__': '__main__', 'classattr': 'foo', '__init__': <function A.__init__ at 0x0000018AAB2A2400>, 'some_func': <function A.some_func at 0x0000018AAB2A2488>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}