0
votes

Existe-t-il un moyen de Python d'intégrer des objets de classe intérieure avec des objets de classe extérieure?

Je suis nouveau à la programmation orientée objet dans Python. J'ai essayé d'essayer un petit morceau de code pour comprendre comment les classes fonctionnent surtout les classes imbriquées. S'il vous plaît voir sur un code ci-dessous. Je dois attribuer quelques arguments pour les paramètres de la classe des ordinateurs portables. Après cela, la méthode Afficher en classe des étudiants doit appeler des attributs à partir d'une instance d'ordinateur portable, puis afficher le message conformément à la méthode show () code>. Par exemple, si je crée lap1 = ordinateur portable ("HP", "i5", "8 Go") code> alors la méthode Afficher doit afficher "gowtham avec ordinateur portable HP". Je ne suis pas capable de comprendre ce qui se passe mal.

__init__() missing 3 required positional arguments: 'brand', 'cpu', and 'ram'   


0 commentaires

3 Réponses :


0
votes

Le message d'erreur est clair, même si vous n'aviez pas réussi à inclure tout le message. Regardez la dernière ligne de étudiant .__ init __ : xxx

L'instanciation des ordinateurs portables nécessite trois arguments; Vous avez fourni non plus.

Vous n'avez pas spécifié comment vous vous attendez à ce que cela fonctionne. Si vous voulez un ordinateur portable «factice» attribué à un nouvel élève, vous devez modifier ordinateur portable .__ init __ pour faire un mannequin. Si vous insistez sur le fait que l'ordinateur portable existe déjà lorsque vous instaniez un élève, vous devez passer à l'objet ordinateur portable existant - ou peut-être passer dans les arguments de l'ordinateur portable.


2 commentaires

Si je pensais bien, vous voulez dire que je devrais l'écrire comme self.lap = self.elaptop (marque, CPU, RAM). J'ai essayé celui-ci aussi, il s'agissait toujours d'une erreur


C'est une façon, mais vous devez soutenir cette instanciation en passant dans les arguments requis. "Néanmoins, il s'agissait d'une erreur" n'est pas une spécification de problème.



0
votes

Donc, je pense que vous êtes confus sur quel est le point d'une classe imbriquée et comment il se rapporte à la classe des parents.

Il suffit de vous nier une définition de classe à l'intérieur d'une autre ne signifie pas que la classe mère crée instantanément / a accès à la classe imbriquée. p>

Les classes de nidification sont vraiment utilisées pour aider à organiser des cours similaires. Même il ne serait probablement probablement pas préférable d'avoir simplement des classes non déposées à l'intérieur d'un module. Par exemple, vous pourriez faire valoir que c'est une bonne raison de nier une catégorie de classe qu'ils sont similaires. P>

laptop = Laptop(brand, cpu, ram)
student = Student(name, rollno, laptop)


4 commentaires

Merci mate, avec votre conseil mon code a fonctionné. Mais je veux toujours savoir si la sortie que je recherche ne sera pas possible par des classes imbriquées? Juste une curiosité .. :)


Oui, c'est possible avec une classe imbriquée mais pas avec la voie actuelle que vous travaillez avec elle. Vous avez deux façons de le faire. De la même manière que j'ai posté ci-dessus mais lorsque vous instaniez l'ordinateur portable , il serait ordinateur portable = étudiant.laptop (marque, CPU, RAM) . Ou vous pouvez transmettre tous les paramètres de l'ordinateur portable dans étudiant comme étudiant (nom, rollno, marque, cpu, bélier) puis à l'intérieur de __ init __ de de < Code> Student Vous allez simplement changer self.laptop = self.laptop () à self.laptop = étudiant.laptop (marque, CPU, RAM) depuis Maintenant, ces paramètres ont été passés dans le __ init __ de étudiant .


Merci beaucoup mier, j'ai bien compris quelle est l'erreur que j'ai commise avec les classes imbriquées. L'idée que vous avez mentionnée a fonctionné correctement pour moi. Puis-je savoir existe-t-il des ressources pour la compréhension du POO d'un niveau très débutant. Si oui, laissez-moi savoir, ça va m'aider beaucoup


Pas de soucis. Continuez la programmation et finalement, vous comprendrez le concept de OOP. Regarde ça. TutorialSpoint.com/python/python_classes_Object.htm .



0
votes

Il n'y a pas de raison réelle pour ordinateur portable code> d'un attribut de étudiant code> ou pour étudiant code> pour savoir comment instancier ordinateur portable code>.

class Student:
    def __init__(self, name, rollno, laptop):
        self.name = name
        self.rollno = rollno
        self.lap = laptop
        
    def __str__(self):
        return f"{self.name} has roll number {self.rollno}"
    
    def show(self):
        print(self.name + " has " + self.lap.brand + " laptop")
    

class Laptop:
    def __init__(self, brand, cpu, ram):
        self.brand = brand
        self.cpu = cpu
        self.ram = ram
            
    def display(self):
        print(self.brand, self.cpu, self.ram)
        

s1 = Student("Gowtham", 55, Laptop("HP", "i5", "8GB"))
print(s1)
s1.show()


0 commentaires