Эта статья участвует в "Месяце тем Python", подробнее см.Цепочка действий
Управляемое чтение
Я только недавно закончил изучать java, и я всегда чувствую себя незнакомым с наследованием и полиморфизмом.Я обнаружил полиморфизм наследования python, когда искал информацию, и нашел ее интересной, поэтому я поделюсь ею с вами и сравним ее с java.
наследовать
что такое наследование
- Конечно, приведенная выше картина — всего лишь метафора.На самом деле наследование — это концепция объектно-ориентированной программной технологии в коде, и это три основные характеристики объектно-ориентированного подхода вместе с полиморфизмом и инкапсуляцией. Наследование позволяет подклассам иметь свойства и методы родительского класса или переопределять или добавлять свойства и методы. Примечание. Наследование в python делится на: одиночное наследование и множественное наследование.
- Целью наследования является повышение скорости повторного использования кода и сокращение объема ненужного кода.На следующем рисунке показано, что животные обладают основными характеристиками кошек и собак.Животные являются родителями, а кошки и собаки – детьми.
Унаследованные функции
-
1. При методе вызова базового класса необходимо добавить префикс имени класса базового класса, и обязательна переменная параметра SELF. В отличие от вызова обычной функции в классе нет необходимости вводить параметр Self.
-
2. Построение базового класса в наследовании (init()) не вызывается автоматически, его нужно вызывать специально при построении самого его производного класса.
-
3. Python всегда сначала ищет метод соответствующего типа.Если он не может найти соответствующий метод в производном классе, он начинает искать один за другим в базовом классе. (Сначала найдите вызываемый метод в этом классе, а затем перейдите к базовому классу, если вы не можете его найти).
-
4. Родительский класс в наследовании. Класс, который раньше наследовался, называется родительским классом, также называемым базовым классом или суперклассом. Подкласс: класс, который наследует другие классы, называется подклассом, также называемым производным классом.
единоличное наследство
- Python поддерживает наследование классов. Если язык не поддерживает наследование, классы бессмысленны. В связи с этим, говоря о языке, лучше смотреть на реальный код. (личное мнение)
class Animal: #父类
def eat(self):
print("-----吃-----")
def drink(self):
print("-----喝-----")
def sleep(self):
print("-----睡-----")
class Dog(Animal): #子类继承父类
"""
def eat(self):
print("-----吃-----")
def drink(self):
print("-----喝-----")
def sleep(self):
print("-----睡-----")
"""
pass
class Cat:
pass
wang_cai = Dog()
wang_cai.eat()
wang_cai.drink()
wang_cai.sleep()#wang——cai继承了动物的吃,喝,睡
многоуровневое наследование
Проще говоря, это отношение: животное - собака - рычащая собака (это все более конкретно) подкласс наследует родительский класс и затем наследуется другими подклассами
class Animal:
def eat(self):
print("-----吃-----")
def drink(self):
print("-----喝-----")
class Dog(Animal):
def bark(self):
print("-----汪汪叫------")
class XTQ(Dog):
"""定义了一个哮天犬 类"""
pass
#继承之后哮天犬就会“吃”,“喝”,“汪汪叫”
переписать
Как следует из названия, этот метод переписан, но:Имя метода не изменилось
Например:
class Animal: #父类
def eat(self):
print("-----吃-----")
def drink(self):
print("-----喝-----")
class Dog(Animal):
def bark(self):
print("-----汪汪叫------")
class XTQ(Dog): #重写Dog方法
"""定义了一个哮天犬 类"""
def bark(self):
print("----嗷嗷叫-----")
#重写了bark
множественное наследование
Эта картина ярко выражает смысл множественного наследования: животное наследует пингвинов и эрху одновременно.
Следующий код:
# 定义一个父类
class qi-e:
def printA(self):
print('----企鹅----')
# 定义一个父类
class er-ha:
def printB(self):
print('----二哈----')
# 定义一个子类,继承自A、B
class C(A,B):
def printC(self):
print('----我也不知道是什么----')
obj_C = C()
obj_C.printA()
obj_C.printB()
полиморфизм
- Функция: Разрешить функциям с разными функциями использовать одно и то же имя функции, чтобы функции с разным содержимым (функциями) можно было вызывать с одним именем функции.
- Особенности: важно только, имеют ли методы экземпляра объекта одно и то же имя, а не тип, к которому принадлежит объект; отношения наследования между классами, которым принадлежит объект, необязательны; преимущества полиморфизма могут повысить гибкость внешних вызов кода, что делает код более общим, совместимость относительно сильна; полиморфизм — это метод вызова методов, который не влияет на внутреннюю структуру класса.
class Duck:
def quack(self):
print("Quaaaaaack!")
class Bird:
def quack(self):
print("bird imitate duck.")
class Doge:
def quack(self):
print("doge imitate duck.")
def in_the_forest(duck):
duck.quack()
duck = Duck()
bird = Bird()
doge = Doge()
for x in [duck, bird, doge]:
in_the_forest(x)
расширять:
- Производительность полиморфизма в Java: полиморфизм можно понимать как несколько форм вещи. Точно так же полиморфизм также поддерживается в python, но он ограничен поддержкой полиморфизма, главным образом потому, что использование переменных в python не нужно объявлять, поэтому нет полиморфизма, в котором ссылки родительского класса указывают на объекты подкласса, а python делает не поддерживает перегрузку. Использование полиморфизма в python не так очевидно, как в Java, поэтому нет особого смысла намеренно говорить о полиморфизме в python.
Суммировать
Я думаю, что язык удобен для вас в использовании.Наследование и полиморфизм в java и python имеют свои преимущества.При использовании вы должны выбрать свое собственное спокойствие.В то же время эти два также можно сравнить и запомнить, не только потому, что вы знаете один язык.Ну, давайте выучить немного больше, чтобы в случае, если вы можете использовать его, вы можете спасти свою жизнь.