Python:如何引用成员变量

标签 python class inheritance member

我一直在 Codecademy 上学习 Python,但我很困惑。我不知道如何引用成员变量(我希望这就是它们的名称)。这是我写的一段代码来证明我的困惑:

class Triangle(object):
    number_of_sides = 3

    def __init__(self, angle1, angle2, angle3):
        self.angle1 = angle1
        self.angle2 = angle2
        self.angle3 = angle3

    def check_angles(self):
        return self.angle1 + self.angle2 + self.angle3 == 180

class Equilateral(Triangle):
    angle = 60
    def __init__(self):
        self.angle1 = self.angle
        self.angle2 = self.angle
        self.angle3 = self.angle

因此在 Equilateral 子类中,angle1angle2angle3 不包含在 __init__ 的参数中>。但是,在下面的代码中,__init__ 重新初始化了 modelcolormpg。为什么是这样?它不应该像上面代码中的 Equilateral 子类一样被继承吗?我不明白为什么它们的写法不同。

class Car(object):
    condition = "new"
    def __init__(self, model, color, mpg):
        self.model = model
        self.color = color
        self.mpg   = mpg

    def display_car(self):
        print "This is a %s %s with %s MPG." %(self.color, self.model, str(self.mpg))

    def drive_car(self):
        self.condition = "used"

class ElectricCar(Car):
    def __init__(self, model, color, mpg, battery_type):
        self.model = model
        self.color = color
        self.mpg   = mpg
        self.battery_type = battery_type

最佳答案

However, in the code below, init re-initializes model, color, and mpg. Why is this?

因为 ElectricCar 的作者希望用户能够使用四个参数初始化 ElectricCar

ec = ElectricCar('xyz-500', 'blue', 0.5, 'boxy')

但是,他们应该将参数传递给基类的 __init__ 方法:

class ElectricCar(Car):
    def __init__(self, model, color, mpg, battery_type):
        super(ElectricCar, self).__init__(model, color, mpg)
        self.battery_type = battery_type

EquilateralTriangle 的情况下,所有角度都相同并且必须为 60 度,因此能够从用户提供的三个角度初始化这样的对象是没有意义的。

关于基类的相同注释 __init__ 适用:

class Equilateral(Triangle):
     angle = 60
     def __init__(self):
         super(Equilateral, self).__init__(Equilateral.angle,
                                           Equilateral.angle,
                                           Equilateral.angle)

另请注意,从三个角度初始化 Triangle 毫无意义,如果您谈论的是三角形内角加起来为 180 度(或任何固定的数字)。仅通过两个角度会更有意义。

关于Python:如何引用成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849249/

相关文章:

c++ - 继承模板转换运算符

python - Django 管理错误

python: dict 作为另一个 dict 的原型(prototype)/模板 - std.lib 解决这个问题的方法?

c++ - 非静态成员 C++98 的无效使用

twitter-bootstrap - Bootstrap 在断点处使用 css 类 (xs,md...)

swift - 在 Swift 中初始化类属性

Javascript 继承对象

python - 比较字符串列表以查找序列的缺失值

python - 如何从图像中删除水平和垂直线

java - 如何强制子类创建构造函数?