Добавление __getattribute__ для печати сообщения для строки типа - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь добавить печать / запись сообщения каждый раз, когда к определенной переменной обращаются (если, для, печать назначена другой переменной), это всегда строка.

Что работает (но не совсем то, что мне нужно, ниже, если в заявлении я не хочу получить к нему доступ как 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>

Изменение объекта на стр:

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

Я ищу приведенный выше пример в stdout: :

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

Кроме того, поведение для вычисления оператора if в строковом контексте - это время, когда оно выводит сообщение ...

Общие вопросы: Допустим, скажем

if a: print(True)

Какую магическую функцию вызовет python, если a? Это getattribute ? Для класса Python str невозможно переопределить getattribute ?

Спасибо

...