Как менять переменную класса из метода своего класса и метода другого класса
first.py
class first_class():
foo = 0
def print_foo(self):
print(self.foo, end='')
def change_foo(self):
self.foo += 1
class second_class():
@staticmethod
def change_foo_from_another_class():
first_class().change_foo()
second.py
from first import first_class, second_class
for _ in range(2):
first_class().print_foo()
second_class().change_foo_from_another_class()
first_class().change_foo()
Ожидаемый вывод: 02 Имеющийся: 00
Почему переменная не меняется?
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Я увидел вашу задачу так:
#from first import FirstClass, FirstClass
class FirstClass():
foo = 0
def print_foo(self):
print(f'FirstClass(): print_foo(self): {self.foo}') #, end=''
def change_foo(self):
self.foo += 1
print(f' FirstClass(): change_foo(self): {self.foo}') #, end=''
class SecondClass():
@staticmethod
def change_foo_from_another_class(firstClass):
# FirstClass().change_foo()
firstClass.change_foo()
class MainClass():
def __init__(self):
super().__init__()
self.firstClass = FirstClass()
self.secondClass = SecondClass()
def run(self):
for _ in range(2):
self.firstClass.print_foo()
self.secondClass.change_foo_from_another_class(self.firstClass)
self.firstClass.change_foo()
if __name__ == '__main__':
mainClass = MainClass()
mainClass.run()
print('=' * 35)
mainClass.firstClass.print_foo()
Автор решения: Dmitry Websmith
→ Ссылка
Есть классы, это как бы общая вещь для чего бы то ни было и есть объект этого класса (класс человечество и объект этого класса человек). Для изменения объекта, его нужно передать туда, где вы его собираетесь изменять. В данном случае для изменения атрибута первого класса из 2ого класса, нужно передать объект 1ого класса во второй (sc.get(fc)):
class first_class():
def __init__(self):
self.foo = 0
def print_foo(self):
print(self.foo)
def change_foo(self):
self.foo += 1
return self.foo
class second_class():
def get(self, fc):
self.fc = fc
def change_foo_from_another_class(self):
print(self.fc.change_foo())
return 0
fc = first_class()
fc.print_foo()
sc = second_class()
sc.get(fc)
sc.change_foo_from_another_class()

