gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:04:37 25 4
gpt4 key购买 nike

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

    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__ 将打印包含该函数的映射代理,但 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__ 将包含所有方法和属性作为键、值对的映射。

最佳答案

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

当调用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

类的这个属性在实例中就找不到了。dict::

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}

关于python - Python对象实例中的dict不包含类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com