У меня вопрос о __class__ в python.
В документации указано, что __class__ - класс, к которому принадлежит экземпляр класса. Поэтому я провел серию экспериментов:
class counter:
count = 0
def __init__(self):
self.__class__.count += 1
NewCounter1 = counter()
print NewCounter1.count #The result is 1
NewCounter2 = counter()
print NewCounter2.count #The result is 2
print NewCounter2.__class__.count is NewCounter2.count #result: True
Все идет хорошо.
Затем введите код следующим образом:
NewCounter2.__class__.count = 3
print NewCounter1.count #result:3
print NewCounter1.__class__.count #result:3
print NewCounter2.count #result:3
print NewCounter2.__class__.count #result:3
print NewCounter2.__class__.count is NewCounter2.count #result: True
Из приведенного выше кода я подумал, что возможно NewCounter1.count равно NewCounter1 или __class__.count, но следующий код меня удивил:
NewCounter2.count = 5
print NewCounter1.count #result:3
print NewCounter1.__class__.count #result:3
print NewCounter2.count #result:5
print NewCounter2.__class__.count #result:3
print NewCounter2.__class__.count is NewCounter2.count #result: False
Почему изменился NewCounter2.count, но NewCounter2.__class__.count остался на 3? Что еще, когда я изменил NewCounter2.count, NewCounter2.__class__.count is NewCounter2.count стал False. Что в мире есть атрибут __class__?