Я изучаю Python на 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
Таким образом, в равносторонний подклассе angle1
, angle2
, angle3
, не включены в качестве параметров __init__
. Однако в приведенном ниже коде __init__
повторно инициализирует model
, color
и mpg
. Почему это? Не следует ли это просто унаследовать, как в приведенном выше коде с подклассом 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
'super (Equilateral, self) .__ init __ (угол, угол, угол)': это не работает (вызывает 'NameError'). Метод автоматически не имеет доступа к пространству имен этого класса. Если вы хотите получить доступ к 'angle', вам нужно использовать' Equilateral.angle' или 'self.angle'. – dhke
@ dhke да, конечно, спасибо. Исправлена ошибка. – juanchopanza