Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~
понимание наследования
наследовать(Inheritance): Высокоуровневая абстракция для повторного использования кода.
- Наследование — одна из квинтэссенций объектно-ориентированного проектирования.
- Реализовано повторное использование кода уровня абстракции высокого уровня в модулях класса.
- Наследование — это процесс, посредством которого вновь определенный класс может почти полностью использовать свойства и методы исходного класса.
Будь то базовый класс или производный класс, это просто оператор наследования, это обычный класс Python.
Его также можно разделить на подклассы, суперклассы и суперклассы.
Самый базовый класс - это базовый класс. После одного наследования можно получить производный класс. Его также можно наследовать снова, чтобы получить производный класс. Теперь самый базовый класс и первый унаследованный производный класс - это родительский класс и дочерний Отношение между производным классом и последним производным классом также является отношением между родительским классом и подклассом, в то время как самый базовый класс и последний производный класс относятся к отношению между суперклассом и подклассом
Производный класс может наследовать не только один базовый класс, но и несколько базовых классов, что является концепцией множественного наследования.
Построение наследования классов
Когда класс наследует, отношение наследования объявляется при его определении.Синтаксическая структура выглядит следующим образом.
class <派生类名>(<基类名>): # 基类名可以带路径:ModuleNama.BaseClassName
def __init__(self, <参数列表>):
<语句块>
...
Производные классы могут напрямую использовать свойства и методы базового класса.
- Свойства базового класса в основном идентичны свойствам, определенным в производном классе.
- Производные классы могут напрямую использовать атрибуты класса и атрибуты экземпляра базового класса.
- Производные классы могут напрямую использовать различные методы базового класса.
- При использовании метода класса и свойства класса базового класса вызывайте его с именем класса базового класса.
пример кода
class TestClass:
def __init__(self, number):
self.sum_number = 0
for i in range(number + 1):
self.sum_number += i
def sum_num(self):
return self.sum_number
class HumanNameClass(TestClass):
def double_sum(self):
return self.sum_number * 2 # 对基类属性的使用
value1 = HumanNameClass(100)
print(value1.sum_num()) # 5050 # 对基类实例方法的使用
print(value1.double_sum()) # 10100 # 对派生类实例方法的使用
В Python есть две функции, связанные с оценкой отношений наследования.
функция | описывать |
---|---|
isinstance(object, classinfo) |
Определите, является ли объект объектом экземпляром classinfo или экземпляром подкласса, возвратите True или False |
issubclass(class, classinfo) |
Определяет, является ли класс параметра подклассом параметра типа classinfo, и возвращает True или False. |
Возьмите код выше,
print(isinstance(value1, TestClass)) # True
print(isinstance(value1, HumanNameClass)) # True
print(isinstance(value1, int)) # False
print(issubclass(HumanNameClass, TestClass)) # True
print(issubclass(TestClass, HumanNameClass)) # False
Самый простой класс в Python
Поскольку все в Python является объектом, любой класс также является объектом, и все типы данных в Python также являются объектами; самым основным классом, предоставляемым языком Python для всех классов, является объект.
- объект — это существительное самого основного класса Python, перевод не требуется
- Все объекты наследования по умолчанию, если они определены
- Сохраненные свойства и сохраненные методы по существу являются свойствами и методами класса объекта.
образец кода
print(object.__name__) # 打印object的名字 # object
print(object.__bases__) # 打印object所继承的类名称 # ()
print(object.__doc__) # 打印object类描述 # The most base type
print(object.__module__) # 打印object所在模块的名称 # builtins
print(object.__class__) # object所对应的类信息 # <class 'type'>
Три элемента объекта Python
-
логотип identity: объект не меняется после создания, используйте
id()
Получить, обычно адрес памяти -
тип type: тип объекта, с
type()
получить - ценность value: разделен на переменнуюmutableс неизменнымimmutableдва
Две встроенные функции Python, связанные с базовыми классами
функция/ключевое слово | описывать |
---|---|
id(x) | Возвращает идентификатор x. в CPythonid()Функция используется для получения адреса памяти объекта. |
x is y |
Оцените, равны ли тождества x и y, верните True или False и не оценивайте значение |
Перегрузка классов Python
Перегрузка — это определение свойства или метода базового класса в производном классе.
- Перегрузка свойств: производный класс определяет и использует свойство с тем же именем, что и у базового класса.
- Перегрузка метода: производный класс определяет и использует метод с тем же именем, что и у базового класса.
перегрузка свойств
Перегрузка атрибутов использует принцип ближайшего покрытия, и перегрузка не требует специальной маркировки. Шаги метода
- Предпочитать свойства и методы, переопределенные производными классами
- Затем найдите свойства и методы базового класса.
- Поиск свойств и методов суперкласса
пример кода
class TestClass:
text = "这是基类的类属性"
def __init__(self, number):
self.sum_number = 0
for i in range(number + 1):
self.sum_number += i
def sum_num(self):
return self.sum_number
class HumanNameClass(TestClass):
text = "这是派生类的类属性" # 类属性重载
def __init__(self, number):
self.sum_number = 1000 # 实例属性重载
def double_sum(self):
return self.sum_number * 2
value1 = HumanNameClass(100)
print(TestClass.text) # 这是基类的类属性
print(value1.text) # 这是派生类的类属性
print(value1.sum_num()) # 1000
перегрузка метода
Перегрузка метода — это определение метода базового класса производным классом, она делится на полную перегрузку и инкрементную перегрузку.
Полная перегрузка: производный класс полностью переопределяет метод с тем же именем, что и у базового класса.
Определите метод с тем же именем непосредственно в производном классе
образец кода
class TestClass:
def __init__(self, number):
self.sum_number = 0
for i in range(number + 1):
self.sum_number += i
def sum_num(self):
return self.sum_number
class HumanNameClass(TestClass):
def sum_num(self): # 方法的重建
return self.sum_number * 2
value1 = HumanNameClass(100)
print(value1.sum_num()) # 10100
Инкрементная перегрузка: производный класс расширяет метод, который определяет то же имя, что и базовый класс, структуру синтаксиса.
class <派生类名>(<基类名>):
def <方法名>(self, <参数列表>):
super().<基类方法名>(<参数列表>)
...
Использование инкрементной перезагрузки
super()
функция
образец кода
class TestClass:
def test_text(self):
print("这是基类的方法")
class TestClass1(TestClass):
def test_text(self): # 增量重载
super().test_text()
print("这是新增的方法里面的语句")
doc1 = TestClass()
doc2 = TestClass1()
print(doc1.test_text())
print(doc2.test_text())
'''
---输出结果---
这是基类的方法
None # 因为函数没有返回值
这是基类的方法
这是新增的方法里面的语句
None # 因为函数没有返回值
'''
Множественное наследование классов
Конструкция множественного наследования заключается в объявлении отношения наследования во время определения, а структура синтаксиса
class <类名>(<基类名1>, <基类名2>,..., <基类名N>): # 基类名可以带路径:ModuleNama.BaseClassName
def __init__(self, <参数列表>):
<语句块>
...
Множественное наследование в Python использует подход в глубину слева направо. Так называемая глубина сначала слева направо состоит в том, чтобы начать с самого левого, чтобы найти его базовый класс.Если базовый класс не смотрит вверх, пока не будет найден самый базовый класс объектов, он начнет искать вправо .
Использование всех свойств и методов выбирается в порядке «сначала в глубину, слева направо».
Конструктор также следует вышеуказанным принципам,super()
Также обратитесь к вышеуказанным принципам
Порядок нескольких базовых классов является ключевым
образец кода
class Test1:
def test(self):
text = "这是基类1"
return text
class Test2:
def test(self):
text = "这是基类2"
return text
class Test3(Test1, Test2):
pass
class Test4(Test2, Test1):
pass
value1 = Test3()
value2 = Test4()
print(value1.test()) # 这是基类1
print(value2.test()) # 这是基类2
Последовательно определяем результат вывода
Понимать концепцию наследования, конструкцию наследования классов, понимать, что объект — это самый базовый класс в Python.
Принцип перегрузки свойств класса — это последний принцип
Перегрузка методов класса: перезагрузка аналогична перегрузке атрибутов класса, используется инкрементная перегрузкаsuper()
функция
Метод, используемый множественным наследованием, - сначала в глубину, слева направо.