为什么我可以重写“\uu setattr\uuuuuuuuuuuuuuuuuuuuuu”而不在\uuuuu init\uuuuuuuuuuu方法中分配它?

2024-04-19 10:07:54 发布

您现在位置:Python中文网/ 问答频道 /正文

例如

def __setattr__(self, name, value):
    ...

工作正常,但是:

def __init__(self):
    self.__setattr__ = foo

似乎没有取得任何成就,因为foo从未被称为。你知道吗

提前谢谢。你知道吗


Tags: nameselffooinitvaluedef成就setattr
1条回答
网友
1楼 · 发布于 2024-04-19 10:07:54

__setattr__使用class方法,而不是instance方法。检查以下代码的输出:

代码:

def func(*args):
    print " Func "
    print args

class A():
    def __setattr__(*args):
        print " SetAttr "
        print args


a = A()

print "a.x = 10"
a.x = 10
print

A.__setattr__ = func

print "a.y = 20"
a.y = 20
print

输出:

a.x = 10
 SetAttr 
(<__main__.A instance at 0x2cb120>, 'x', 10)

a.y = 20
 Func 
(<__main__.A instance at 0x2cb120>, 'y', 20)

您可以编写代码,以便类方法调用实例方法:

class C():
    def __init__(self, setattr):
        #Must access in this way since we overwrote __setattr__ already
        self.__dict__['setattr_func'] = setattr

    def __setattr__(self, name, value):
        self.setattr_func(name, value)

相关问题 更多 >