在一个类中调用一个函数,在另一个类python中调用一个函数

时间:2019-11-03 17:10:19

标签: python oop methods

我在尝试用一个类调用一个函数时遇到麻烦,而该类又调用了另一个类中存在的单独函数。

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 :(得分:0)

您想要这样的东西:

class PrintNum:

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

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

Numbers类的方法是 instance 方法-需要在类的 instance 而不是类本身上调用它们。我们通过调用类来创建实例:

numbers_instance = Numbers()

因此,在PrintNum的方法中,我们在调用方法之前创建Numbers的实例。

答案 1 :(得分:0)

在这种情况下,您没有正确使用类。参数self引用您为给定类创建的对象实例。您不应尝试在类的实例方法之外访问它。尝试将self参数传递给另一个类将不起作用,因为它们将代表两个不同的对象实例。在这种情况下,您根本不会实例化Numbers对象,因此它没有实例。要正确执行此操作,请在PrintNum内实例化Numbers实例,然后按如下所示调用其实例方法:

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

答案 2 :(得分:0)

要从类中获得此类行为,您需要使用继承或嵌入类。尽管我觉得继承可能更适合这里,但我还是使用嵌入来解决上述问题。

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