试图理解类和对象如何相互作用 - python

时间:2012-11-25 21:10:45

标签: python class

我正在研究“上下文中的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_planetshow_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()

1 个答案:

答案 0 :(得分:4)

self.planets包含所有Planet个对象,除了mass之外还包含name等对象。当你试图打印行星时它打印行星名称的原因是print,为了打印某些东西,首先需要将对象转换为字符串。它可以通过将对象传递给str函数来完成此操作。 str函数通过调用对象上的__str__来转换它。如果你看一下Planet的定义,__str__会返回行星的名字,所以打印星球时,会打印出它的名字。