У меня есть следующий пример настройки:Python класс наследования Инициализация
class Feet:
def __init__ (self, value = 0.0):
self.value = value
self.units = "f"
def feet(self):
return self.value
class Meters:
def __init__(self, value = 0.0):
self.value = value
self.units = "m"
def feet(self):
# This is probably not an accurate conversion.
return self.value * 2.54 * 10
class Distance (Feet, Meters):
def __init__(self, type = Feet()):
Feet.__init__(self)
Meters.__init__(self)
print type.feet() -- Prints 254.0
self = type
print self.feet() -- Prints 254.0
dist = Distance(Meters(10.0))
print dist.units -- Prints = "m"
print dist.value -- Prints = 0.0
print dist.feet() -- Prints = 0.0
Я не могу понять, почему, когда я инициализировать класс к типу счетчиков класса и присвоить его 10.0, я не держу 10.0. Однако подразделения, похоже, остались верными. Я что-то пропустил о том, как это происходит?
Мое понимание заключается в том, что я создаю «экземпляр» счетчиков и присваиваю его «собственной» переменной Distance. Если значение self не может быть изменено, я мог бы понять, были ли мои единицы «f», но мои единицы «m», поэтому он явно присваивает класс Meters себе, но он не принимает инстанцированные значения, которые я нахожу довольно странными ,
Если честно, я даже не знаю, что я буду делать в этом случае Google, поэтому я извиняюсь, что не сделал много поискового запроса, большинство из того, что я нашел, совсем не применимо к этому типу проблема.
Кроме того, мой план состоял в том, чтобы в основном «отличить» его к тому же типу независимо от того, что вы прошли, например, для ног я вернул бы экземпляр сам по классу футов, а в классе «Метров» я возвращал футы (self.Value * 2.54 * 10), поэтому у меня всегда было бы расстояние в футах.
так для ног ноги становится
def feet(self):
return self
для счетчиков ног становится
def feet(self):
return Feet(self.value * 2.54 * 10)
повторим, есть причина, по которой я могу пройти в 1 из 2 классов как часть инициализации , но он не принимает мои параметры инициализации для этого класса?
Мне действительно непонятно, почему я могу назначить «я» в классе расстояния, а до его возвращения появляется, чтобы иметь правильную инициализацию, но по возвращении он не работает правильно.
Вы переопределяете все методы. Первые два класса имеют те же методы. Вы наследуете от обоих, поэтому методы второго класса переопределяют метод первого класса. – Paco