Как менять переменную класса из метода своего класса и метода другого класса

Рейтинг: -1Ответов: 2Опубликовано: 25.03.2023

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

Почему переменная не меняется?

Ответы

▲ 1Принят

Я увидел вашу задачу так:

#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()

введите сюда описание изображения

▲ -1

Есть классы, это как бы общая вещь для чего бы то ни было и есть объект этого класса (класс человечество и объект этого класса человек). Для изменения объекта, его нужно передать туда, где вы его собираетесь изменять. В данном случае для изменения атрибута первого класса из 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()

введите сюда описание изображения