2

我正在研究我的 Miller & Ranum 中的“Python Programming in Context”中的示例。

我正在完成关于类的部分,我们正在构建一个太阳系,我不清楚代码的某个部分。

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_planetandshow_planets方法是如何工作的。在 shell 中,我使用“Planet”类创建了一些行星。行星类有更多的参数,而不仅仅是名称。它还包括名称、半径、质量、与太阳的距离和卫星数量。当我将行星对象传递给 SolarSystem 类时,self.planets 列表是否包含传递给行星对象的所有参数?如果是这样,该方法如何show_planet知道打印出行星的正确名称?我想我可能在这里错过了一些关键的东西,其中一个问题是添加一种方法来总结太阳系的总质量。但我不确定如何从 Planets 类访问质量的实例变量,以便我可以在 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()
4

1 回答 1

4

self.planets包含所有Planet对象,mass除了name. 当您尝试打印行星时,它会打印行星名称的原因是print,为了打印某些内容,首先需要将对象转换为字符串。它可以通过将对象传递给str函数来做到这一点。该str函数通过调用__str__对象来转换它。如果查看 的定义Planet__str__则返回行星的名称,因此在打印行星时,会打印其名称。

于 2012-11-25T21:14:16.097 回答