J'ai du mal à essayer d'appeler une fonction avec une classe qui appelle une fonction distincte qui existe dans une autre classe.

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)
0
Sed Ward 3 nov. 2019 à 20:10

3 réponses

Meilleure réponse

Pour obtenir un tel comportement de vos classes, vous devez utiliser l'héritage ou intégrer la classe. J'ai utilisé l'intégration pour résoudre le problème ci-dessus, bien que je pense que l'héritage pourrait être mieux adapté ici.

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
Enoch 3 nov. 2019 à 18:04

Dans ce cas, vous n'utilisez pas les classes correctement. Le paramètre self fait référence à l'instance d'objet que vous avez créée pour la classe donnée. Vous ne devez pas essayer d'y accéder en dehors des méthodes d'instance d'une classe. Essayer de passer le paramètre self à une classe différente ne fonctionnera pas car ils représenteraient deux instances d'objet différentes. Dans ce cas, vous n'instanciez jamais un objet Numbers, il n'a donc aucune instance. Pour ce faire correctement, instanciez une instance de Numbers à l'intérieur de PrintNum, puis appelez ses méthodes d'instance comme suit:

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
Chris Zacharias 3 nov. 2019 à 17:19

Vous voulez quelque chose comme ça:

class PrintNum:

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

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

Les méthodes de la classe Numbers sont des méthodes instance - elles doivent être appelées sur une instance de la classe, pas la classe elle-même. Nous créons une instance en appelant la classe:

numbers_instance = Numbers()

Ainsi, dans les méthodes de PrintNum, nous créons une instance de Numbers avant d'appeler les méthodes.

0
snakecharmerb 3 nov. 2019 à 17:18