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),分配参数并以不同的方式传递参数,但没有一个对我有用。有什么办法可以让我传递论据吗?
我真的没有看到内部类的额外好处。我见过很少的用例,它们实际上有助于代码的可读性。在您的代码中,我建议仅使用两个“顶级”类。只有在一些复杂的情况下,内部类才有真正的帮助。
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)