В Python я могу определить два класса parent
и child
, где дочерний класс наследуется от родительского класса. Тогда в child
я могу использовать self
и получить доступ к любым методам, которые существуют в родительском классе (и, вероятно, к любому другому родительскому классу в дереве наследования), если имя не было переопределено в дочернем классе.
Есть ли здесь какие-то предостережения? И рекомендуемый метод просто использовать super()
?
Пример кода:
class parent:
def add_stars(self, str):
return '***'+str+'***'
class child(parent):
def print_something(self):
print(self.add_stars("Bacon"))
[In Console]
>>> c = child()
>>> c.add_stars("Wow")
'***Wow***'
>>> c.print_something()
'***Bacon***'
Редактировать: Собираюсь добавить больше ясности на основе обсуждения в комментариях для всех, кто сталкивается с этим позже. Меня смутило то, что другим способом написания вышеупомянутого child
класса и получения той же функциональности было использование super()
:
class child(parent):
def print_something(self):
print(super().add_stars("Bacon"))
Это то же самое, что child
также не определяет метод с именем add_stars
. Если этот метод существует в child
, тогда self
вместо этого будет использовать метод, определенный в классе child
, тогда как super()
пропустит класс child
и будет смотреть только в суперклассах. Кроме того, оба будут использовать один и тот же порядок разрешения методов. Я хотел знать, есть ли проблемы с использованием self
, как я делал в примере, когда вы обычно используете вместо него super
и т. Д.?
На это ответили ниже и в комментариях.