Python экземпляр

pavlo.raketa

Новичок
Пользователь
Окт 8, 2020
3
0
1
Вопрос следующий: Когда мы создаем екземпляр класа, и потом через @classmetod переписываем значение, это значение будет в экземпляре? Если да, то почему? разве он, не соответствует класу до изменений?
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Python:
class A:
    x = 7
    
    @classmethod
    def method(cls, x):
        cls.x = x
        
instance = A()

instance.x == 7 # True

instance.x = 77
instance.x == 77 # True
A.x == 7 # True

instance.method(42)

instance.x == 77 # True
A.x == 42 # True
 

pavlo.raketa

Новичок
Пользователь
Окт 8, 2020
3
0
1
Python:
class A:
    x = 7
   
    @classmethod
    def method(cls, x):
        cls.x = x
       
instance = A()

instance.x == 7 # True

instance.x = 77
instance.x == 77 # True
A.x == 7 # True

instance.method(42)

instance.x == 77 # True
A.x == 42 # True


#subclass
import time


class Tutorial:
data = "Try"
counter = 0

def print_data_with_new_value(self):
print(self.data+str(self.counter))

@staticmethod
def print_time():
print("Time of finish: " + time.asctime())

@classmethod
def plus_counter(cls):
cls.counter += 1

#main
from tutorial import Tutorial


def some_test():
for i in range(10):
Tutorial.plus_counter()
obj = Tutorial()
obj.print_data_with_new_value()
Tutorial.print_time()

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
#print_hi('PyCharm')
some_test()

#END

Если запустим, у нас 10 раз создаеться новые об'екты класа Tutorial, и будет выводиться Try1,Try2..., окей, но если ПЕРЕД цыклом, мы укажем создание экземпляра, то у нас все равно будет выводиться Try1, Try2... Почему? Из-за self?
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Ничего не понял. Прикрепи код как я - в панели редактирования сообщения три точки - "код".
 

pavlo.raketa

Новичок
Пользователь
Окт 8, 2020
3
0
1
Ничего не понял. Прикрепи код как я - в панели редактирования сообщения три точки - "код".
Python:
#Это основной



from tutorial import Tutorial


def some_test():

    for i in range(10):

        Tutorial.plus_counter()

        obj = Tutorial()

        obj.a1()

    Tutorial.a2()

    
if __name__ == '__main__':

    #print_hi('PyCharm')

    some_test()



#Это Класс



import time


class Tutorial:
    data = "Try"
    counter = 0

    def a1(self):

        print(self.data+str(self.counter))


    @staticmethod

    def a2():

        print("Time of finish: " + time.asctime())


    @classmethod

    def plus_counter(cls):

        cls.counter += 1

Но я уже понял, я в Классе Tutorial, брал переменую класа, self.data, которую увеличевал на +1. Просто думал, что раз создал экземпляр Класа, то в нем есть информация на момент создание экземпляра Класа и не более. А на счет статических методов? В книжках говориться что они пренадлежат Классу, но не видят ни его перемен, ни методов
 

Форум IT Специалистов