Я пытаюсь добавить печать / запись сообщения каждый раз, когда к определенной переменной обращаются (если, для, печать назначена другой переменной), это всегда строка.
Что работает (но не совсем то, что мне нужно, ниже, если в заявлении я не хочу получить к нему доступ как 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 ?
Спасибо