Python:我的代码中发生了意想不到的事情。。。。?
我在自学oop的概念。所以我在我的学生班里有一台班内笔记本电脑。My student class保存学生信息,laptop class保存其笔记本电脑配置。我通过一个student对象(name、rollno、brand、cpu、ram)传递所有必需的参数。我有一个方法可以显示所有传递的信息。但是发生了意想不到的事情Python:我的代码中发生了意想不到的事情。。。。?,python,oop,logic,control-flow,Python,Oop,Logic,Control Flow,我在自学oop的概念。所以我在我的学生班里有一台班内笔记本电脑。My student class保存学生信息,laptop class保存其笔记本电脑配置。我通过一个student对象(name、rollno、brand、cpu、ram)传递所有必需的参数。我有一个方法可以显示所有传递的信息。但是发生了意想不到的事情 class Student: def __init__(self, name, rollno, brand, cpu, ram): self.name =
class Student:
def __init__(self, name, rollno, brand, cpu, ram):
self.name = name
self.rollno = rollno
self.lap = self.Laptop(brand, cpu, ram)
def show(self):
print(self.name, self.rollno, self.lap.show())
class Laptop():
def __init__(self, brand, cpu, ram):
self.brand = brand
self.cpu = cpu
self.ram = ram
def show(self):
print(self.brand, self.cpu, self.ram)
s1 = Student('Mayank', '1654302036', 'H.P', 'i3', '4gb')
s1.show()
我的输出是
H.P i3 4gb
Mayank 1654302036 None
我不知道为什么要先显示我笔记本电脑的详细信息。self.lap.show()
在Student.show
中调用print
之前进行评估(并调用print
本身)
通常,您不会在代码中使用打印“deep”;返回一个str
,由其他人决定是否打印它
class Student:
def __init__(self, name, rollno, brand, cpu, ram):
self.name = name
self.rollno = rollno
self.lap = self.Laptop(brand, cpu, ram)
def show(self):
return "%s %s %s" % (self.name, self.rollno, self.lap.show())
class Laptop():
def __init__(self, brand, cpu, ram):
self.brand = brand
self.cpu = cpu
self.ram = ram
def show(self):
return "%s %s %s" % (self.brand, self.cpu, self.ram)
s1 = Student('Mayank', '1654302036', 'H.P', 'i3', '4gb')
print(s1.show())
但是,如果您确实有充分的理由让show
立即调用print,请不要将self.lap.show()
作为参数传递给print。打印
首先查看学生信息,然后调用lap.show()
这里的问题是,show方法使用的是print()
函数,而不是返回字符串。发生的情况如下:
- 调用
s1.show()
时,解释器希望在Student.show()方法中构建一个字符串李>
- 为此,它将计算提供给
print()
函数的所有参数。这包括调用Laptop.show()
方法。但由于此方法不是返回字符串而是直接打印,因此此内部调用将首先写入终端李>
- 最后,初始调用的输出准备发送到ouptut李>
纠正此行为的最佳方法是覆盖每个类的\uuuu str\uuu
方法。这个方法在Python中打印任何对象时都会被隐藏起来,它必须返回一个string对象,而不是像这里这样打印它。以下是您可能会做的:
class Student:
def __init__(self, name, rollno, brand, cpu, ram):
self.name = name
self.rollno = rollno
self.lap = self.Laptop(brand, cpu, ram)
def __str__(self):
return self.name + ' ' + self.rollno + ' ' + self.lap.__str__()
class Laptop():
def __init__(self, brand, cpu, ram):
self.brand = brand
self.cpu = cpu
self.ram = ram
def __str__(self):
return self.brand + ' ' + self.cpu + ' ' + self.ram
然后调用s1.\uu str\uuuu()
或
等价地,print(s1)
将输出预期结果。因为self.lap.show()
打印其输出,它不会返回它。您应该返回消息,而不是直接在方法中打印它们。还有,为什么要创建一个内部类呢?非常感谢您,先生,您清除了我所有的障碍。))
class Student:
def __init__(self, name, rollno, brand, cpu, ram):
self.name = name
self.rollno = rollno
self.lap = self.Laptop(brand, cpu, ram)
def __str__(self):
return self.name + ' ' + self.rollno + ' ' + self.lap.__str__()
class Laptop():
def __init__(self, brand, cpu, ram):
self.brand = brand
self.cpu = cpu
self.ram = ram
def __str__(self):
return self.brand + ' ' + self.cpu + ' ' + self.ram