Недавно, попав в руки Python Понятия класса, я наткнулся на это наблюдение и не смог понять.
Когда я пытаюсь создать экземпляр из нижеприведенного класса в интерактивном режиме (Python консоль), я также получаю строку Finding __len__
в выводе.
class MyClass(object):
counter = 0
data = 'Class Variable'
def __init__(self):
self.counter += 1
self.value = -1
def __str__(self):
return "Instance {} is the {} instance".format(self.__class__.__name__, self.counter)
def __getattr__(self, item):
print(f'Finding {item}')
return self.__dict__.get(item, f'Attr {item} not available, {self.__dict__}')
def __setattr__(self, key, value):
if key not in self.__dict__:
self.__dict__[key] = value
def __delattr__(self, item):
print(f'Deleting attr: {item}')
if item in self.__dict__:
del self.__dict__[item]
else:
print(f'Cannot find {item} in {self.__dict__}')
if __name__ == '__main__':
inst = MyClass()
print(inst.id)
Но при запуске его в качестве модуля верхнего уровня, эта дополнительная строка не добавляется в вывод.
Может кто-то помогите мне понять, почему вывод Finding __len__
будет отображаться в интерактивном режиме.
Ниже приведен интерактивный вывод,
import WS1
x = WS1.MyClass()
Finding __len__
x.name = 'Yathin'
Finding __len__