我正在研究“上下文中的Python编程”中的示例我的米勒& Ranum。
我正在研究关于类的部分,我们正在构建一个太阳系,我不清楚代码的某个部分。
class SolarSystem:
def __init__(self, asun):
self.thesun = asun
self.planets = []
def add_planet(self, aplanet):
self.planets.append(aplanet)
def show_planets(self):
for aplanet in self.planets:
print(aplanet)
def num_planets(self):
return len(self.planets)
我不确定add_planet
和show_planets
方法是如何工作的。在shell中我使用“Planet”类创建了一些行星。行星类的参数多于名称。它还包括名称,半径,质量,与太阳的距离和卫星的数量。当我将一个行星对象传递给SolarSystem类时,self.planets列表是否包含传递给Planet对象的所有参数?如果是这样,show_planet
方法如何知道打印出行星的名字?我想我可能已经错过了一些关键的东西,其中一个问题是增加一种方法来总结太阳系中的总质量。但是我不确定如何从Planets类访问mass的实例变量,所以我可以在SolarSystem类中对它们求和。
我在github上托管了一个存储库,因为有多个文件,我不想在这里粘贴它。 solarsystem这样你可以看到我在说什么。
我希望这是有道理的,只要问你是否对任何事情都不清楚。 感谢
我添加了一个total_mass方法
def total_mass(self):
total_mass = 0
for aplanet in self.planets:
total_mass = total_mass + get_mass(aplanet)
return total_mass
它不起作用,我不确定原因。
我明白了! 最后一行应该是:
total_mass = total_mass + aplanet.get_mass()
答案 0 :(得分:4)
self.planets
包含所有Planet
个对象,除了mass
之外还包含name
等对象。当你试图打印行星时它打印行星名称的原因是print
,为了打印某些东西,首先需要将对象转换为字符串。它可以通过将对象传递给str
函数来完成此操作。 str
函数通过调用对象上的__str__
来转换它。如果你看一下Planet
的定义,__str__
会返回行星的名字,所以打印星球时,会打印出它的名字。