0

我试图在每次访问某个变量时添加打印/记录一条消息(在 if、for、print、分配给另一个变量中),这些总是字符串。

什么工作(但不完全是我需要的,在 if 语句下面我不想以et的身份访问它,而是我想以e的身份访问它):

class A(object):
    def __inti__(self, string):
        self.string = string
    def __getattribute__(self, name):
        print("message")
        return object.__getattribute__(self, name)
e = A('test')
e.t = 'test'
if e.t == 'test':
    print('test')
print(e)

输出:

message
test
<__main__.A object at 0x2af4fafa52d0>

将对象更改为 str:

class A(str):
    def __init__(self, string):
        self.string = string
    def __getattribute__(self, name):
        print(f"message")
        return str.__getattribute__(self, name)
    #def __repr__(self):
    #    print("message")
    #    return self.string
    pass

e = A('test')
if e == 'test':
    print('test')
print(e)

输出(不打印消息):

test
test

我在标准输出中寻找上述示例的输出是

message <some other init variables> 
<Value of string>

还有在字符串上下文中评估 if 语句的行为,这是它打印出消息的时间......

一般问题:假设

if a: print(True)

如果 a,python 调用什么魔法函数来运行?它是getattribute吗?对于 python str 类,是否无法覆盖getattribute

谢谢

4

0 回答 0