添加__getattribute__来打印字符串类型的消息

我试图在每次访问某些变量时添加打印/记录消息(如果要打印,则将其分配给另一个变量),这些总是字符串。

有效的方法(但并非完全符合我的需要,在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,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

我正在上面的stdout示例中寻找的输出是

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

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

一般问题: 假设

if a: print(True)

如果a,python调用哪个魔术函数来运行?是获取属性吗? 对于python str类,是否无法覆盖 getattribute

谢谢

monster0857 回答:添加__getattribute__来打印字符串类型的消息

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3142809.html

大家都在问