0 votes

En Python, appeler le constructeur depuis une fonction

J'ai créé une classe qui ressemble à ceci:

class tensor:
n = 1
def __init__(self, n):
   self.n = n ;
def prod(t,sca=1):
   newa = tensor(t.n * sca)
   return newa

Mais quand j'imprime prod(tenseur(1),3), par exemple, quelque chose ne va pas. Il semble que l'appel du constructeur dans la déclaration de fonction "newa = tensor(t.n * sca)" ne fonctionne pas. S'il vous plaît dites-moi comment l'appeler dans la fonction.

Selon un article de scaler, lors de l'appel d'une méthode d'une classe, il ne passe pas une instance de la classe. Il est automatiquement passé.

C'est ce que je crois que tu vises :

class tensor:
def __init__(self, n):
   self.n = n

def prod(self, sca=1):
   return tensor(self.n * sca)

Toute aide serait très appréciée ; merci d'avance!

0voto

aEscarcha Points 185

Il semble que le problème dans votre code est que vous essayez d'appeler le constructeur de la classe tensor en utilisant simplement le nom de la classe (tensor), plutôt que d'utiliser l'instance actuelle de la classe (self). Cela peut causer des problèmes car le constructeur de la classe tensor s'attend à recevoir un argument n, mais sans l'instance actuelle de la classe, il ne sait pas quelles valeurs utiliser pour n.

Une solution à ce problème consiste à modifier la méthode prod pour qu'elle utilise l'instance actuelle de la classe tensor pour créer une nouvelle instance de la classe tensor avec la valeur de n multipliée par sca. Vous pouvez faire cela en utilisant le mot-clé self pour faire référence à l'instance actuelle de la classe tensor, comme ceci:

class tensor:
    def __init__(self, n):
        self.n = n

    def prod(self, sca=1):
        newa = tensor(self.n * sca)
        return newa

Avec ce code, lorsque vous appelez la méthode prod sur une instance de la classe tensor, l'instance actuelle de la classe sera automatiquement passée à la méthode sous forme de self, ce qui permettra à la méthode d'accéder à la valeur de n pour cette instance spécifique et de créer une nouvelle instance avec n multiplié par sca.

Vous pouvez ensuite utiliser cette méthode comme ceci:

t = tensor(1)
new_t = t.prod(3)
print(new_t.n)  # imprime 3

Dans cet exemple, nous créons une instance de la classe tensor avec n égal à 1, puis appelons la méthode prod sur cette instance avec sca égal à 3. La méthode prod crée alors une nouvelle instance de la classe tensor avec n égal à 1 * 3 = 3, que nous stockons dans la variable new_t. Enfin, nous imprimons la valeur de n de la nouvelle instance, qui devrait être 3.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X