如何引用成员变量

如何引用成员变量

我一直在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

因此在等边子类中,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

最佳答案

但是,在下面的代码中,init重新初始化model、color和mpg。这是为什么?
因为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度(或任何固定的数字)的那种空间只通过两个角度会更有意义。

10-04 16:22