#python
#python
Вопрос:
У меня есть следующий код:
class Organ():
def __init__(self, organ_name, organ_weight):
self.organ_name = organ_name
self.organ_weight = organ_weight
def __repr__(self):
return "The {organ}'s weight is {weight}"
.format(organ=self.organ_name, weight = self.organ_weight)
class Heart(Organ):
def __init__(self, heart_weight):
self.heart_weight_grams = heart_weight
super().__init__(__class__.__name__, self.heart_weight_grams)
def __repr__(self):
return "My heart's weight is {weight} grams"
.format(weight=self.heart_weight_grams)
my_heart = Heart(200)
print(my_heart) #returns "My heart's weight is 200 grams"
my_heart
Как мне получить доступ к методу метода родительского класса из моего дочернего экземпляра __repr__()
?
Комментарии:
1. что именно вы имеете в виду «из моего дочернего экземпляра»?
Ответ №1:
Чтобы получить доступ к родительскому классу из дочернего, используйте super()
, т.Е.: super().__repr__()
но здесь вам это не нужно, на самом деле вы можете не heart_weight_grams
использовать атрибут, потому что он такой же, как organ_weight
и в родительском
Если у вас больше атрибутов в Heart
классе, вы можете вызвать __repr__
parent и собрать дополнительную информацию из дочернего класса
class Organ:
def __init__(self, organ_name, organ_weight):
self.organ_name = organ_name
self.organ_weight = organ_weight
def __repr__(self):
return "The {organ}'s weight is {weight}".format(organ=self.organ_name, weight=self.organ_weight)
# return f"The {self.organ_name}'s weight is {self.organ_weight}" # shorter
class Heart(Organ):
def __init__(self, heart_weight, hearbeat=60):
super(Heart, self).__init__("heart", heart_weight)
self.hearbeat = hearbeat
def __repr__(self):
return super().__repr__() f" and beats at {self.hearbeat}"
my_heart = Heart(200)
print(my_heart) # The Heart's weight is 200
Комментарии:
1. извините, архитектура класса была задана в соответствии с моими инструкциями по назначению. В моем задании мне было поручено добавить метод repr как для органа, так и для сердца, а также определенные атрибуты для органа и сердца. Но для моего первоначального вопроса, как мне получить доступ к родительскому методу repr из моего дочернего экземпляра?
2. Я бы не стал делать :
__class__.__name__
. Если это необходимо, имя должно быть явным атрибутом. Полагаться на само имя класса — плохая практика. Вы должны иметь право изменять имя класса, не нарушая что-то подобное.3. @CrazyCoder, как я уже писал
super().__repr__()
4. @CrazyCoder Смотри, я добавил дочерний элемент, добавляющий информацию в родительский репозиторий
Ответ №2:
Когда вы наследуете класс, вы можете получить доступ к родительским функциям с помощью super
. Просто используйте super().__repr__()
для доступа к функции.
Комментарии:
1. придирка:
super
не является ключевым словом