Вызов функции внутри одного класса, который вызывает функцию в отдельном классе Python - PullRequest
0 голосов
/ 03 ноября 2019

У меня возникают проблемы при попытке вызвать функцию с одним классом, которая вызывает отдельную функцию, которая существует в другом классе.

class PrintNum():

    def get_square(self):
        Numbers.square_Num(self)

    def Print_Num(self):
        Numbers.square_Num(self)

class Numbers():
    def __init__(self, num1,num2):
        self.num1=num1
        self.num2=num2

    def show_num(self):
        return self.num1,self.mum2,

    def square_Num(self):
        self.num1,self.mum2, = self.num1**2,self.num2**2


p2= PrintNum(3,6)
p2.get_square()

print(p2.Print_Num)

Ответы [ 3 ]

0 голосов
/ 03 ноября 2019

В этом случае вы не используете классы правильно. Параметр self ссылается на экземпляр объекта, который вы создали для данного класса. Вы не должны пытаться получить к нему доступ вне методов экземпляра класса. Попытка передать параметр self в другой класс не будет работать, поскольку они будут представлять два разных экземпляра объекта. В этом случае вы никогда не создаете экземпляр объекта Numbers, поэтому он не имеет экземпляра. Чтобы сделать это правильно, создайте экземпляр Numbers внутри PrintNum, а затем вызовите его методы экземпляра следующим образом:

class PrintNum():
    def __init__(self):
        self.numbers = Numbers()

    def get_square(self):
        return self.numbers.square_number()

    def print_number(self):
        return self.numbers.show_num()

class Numbers():
    def __init__(self):
        self.num1=2
        self.num2=3

    def show_num(self):
        return self.num1,self.mum2

    def square_number(self):
        self.num1,self.mum2 = self.num1**2,self.num2**2


p2= PrintNum()
p2.get_square()

print(p2.print_number())
0 голосов
/ 03 ноября 2019

Чтобы получить такое поведение от ваших классов, вам нужно использовать либо наследование, либо встраивание класса. Я использовал вложение, чтобы решить проблему выше, хотя я чувствую, что наследование может быть лучше здесь.

class PrintNum():

    def __init__(self,a1,a2):
        self.numbers = Numbers(a1,a2)
    def get_square(self):
        self.numbers.square_Num(self)
    def Print_Num(self):
        print(self.numbers)
class Numbers():

    def __init__(self, num1,num2):
        self.num1=num1
        self.num2=num2
    def __repr__(self):
        print(self.num1)
        return self.num2
    def square_Num(self,*args,**kwargs):
        self.num1,self.num2 = self.num1**2,self.num2**2
p2= PrintNum(3,6)

p2.get_square()

p2.Print_Num()
0 голосов
/ 03 ноября 2019

Вы хотите что-то вроде этого:

class PrintNum:

    def get_square(self):
        Numbers().square_Num()

    def Print_Num(self):
        Numbers().square_Num()

Методы класса Numbers являются экземпляром методами - их нужно вызывать на экземпляре класса, а не сам класс. Мы создаем экземпляр, вызывая класс:

numbers_instance = Numbers()

Итак, в методах PrintNum мы создаем экземпляр Numbers перед вызовом методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...