Python 添加_ugetAttribute_uu以打印字符串类型的消息

Python 添加_ugetAttribute_uu以打印字符串类型的消息,python,string,getattribute,Python,String,Getattribute,每次访问某个变量时,我试图添加打印/记录一条消息(在if、for、print中,分配给另一个变量),这些始终是字符串 什么是有效的(但不完全是我需要的,下面的if语句我不想以e.t的身份访问它,而是想以e的身份访问它): 输出: message test <__main__.A object at 0x2af4fafa52d0> 输出(不打印消息): 我在stdout中查找上述示例的输出是: class A(object): def __inti__(self, strin

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

什么是有效的(但不完全是我需要的,下面的if语句我不想以e.t的身份访问它,而是想以e的身份访问它):

输出:

message
test
<__main__.A object at 0x2af4fafa52d0>
输出(不打印消息):

我在stdout中查找上述示例的输出是

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 <some other init variables> 
<Value of string>
python调用了什么神奇的函数来运行?是不是getattribute? 对于python str类,是否无法重写getattribute


谢谢

您应该覆盖其他方法,如
\uuuuu eq\uuuuu()
\uuuu bool\uuuu()
。否则,它们将调用与超类相同的方法,超类将调用原始的
\uuu getattribute\uu()
,而不是覆盖的方法。我希望新类(str)对象具有字符串的所有功能,并且在访问时仍打印消息。那么,我必须在新类中实现通过
dir(str)
获得的所有函数吗
dir(str)
返回78个函数
test
test
message <some other init variables> 
<Value of string>
if a: print(True)