如何在Python3中将外部类和内部类的参数传递给具有相同对象的内部类?

use*_*018 0 python oop class inner-classes python-3.x

下面的代码工作正常,我分别为外部类和内部类创建对象并传递参数

class Student:
    def __init__(self,name,rollno):
        self.name = name
        self.rollno = rollno
    def show(self):
        print(self.name,self.rollno)
        #self.lap.show()

    class Laptop: #inner class
        def __init__(self,brand,cpu'):
            self.brand = brand
            self.cpu = cpu
        def show(self):
            print(self.brand,self.cpu)
s1 = Student('Ram',21)
lap1 =s1.Laptop('Dell','i3')
lap1.show()
Run Code Online (Sandbox Code Playgroud)

在第二个代码中,我在外部(学生)类中创建了内部类(笔记本电脑)对象。那么,我们如何将参数传递给内部类呢?

class Student:
    def __init__(self,name,rollno):
        self.name = name
        self.rollno = rollno
        self.lap = self.Laptop()  #lap is the obj of a inner class

    def show(self):
        print(self.name,self.rollno)
        self.lap.show()  
Run Code Online (Sandbox Code Playgroud)

我尝试使用 self.lap = self.Laptop(brand,cpu),分配参数并以不同的方式传递参数,但没有一个对我有用。有什么办法可以让我传递论据吗?

The*_*jot 5

我真的没有看到内部类的额外好处。我见过很少的用例,它们实际上有助于代码的可读性。在您的代码中,我建议仅使用两个“顶级”类。只有在一些复杂的情况下,内部类才有真正的帮助。

class Student:
    def __init__(self, name, rollno, laptop=None):
        self.name = name
        self.rollno = rollno
        self.laptop = laptop

    def show(self):
        print(self.name, self.rollno)
        if self.laptop:
            self.laptop.show()

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

    def show(self):
        print(self.brand, self.cpu)
Run Code Online (Sandbox Code Playgroud)

然后在使用时,只需初始化并根据需要传递它们即可:

lap1 = Laptop('Dell', 'i3')
s1 = Student('Ram', 21, lap1)
lap1.show()
s1.show()
s2 = Student('Stackoverflow', 9999, lap1)
s2.show()
s3 = Student('No laptop', 2)
s3.show()
Run Code Online (Sandbox Code Playgroud)