一、面向对象的三大基本特征之二继承
继承可以帮助我们高效的重复利用已经写好的代码,让我无需写重复的代码。
class 类名(要继承的类):
被继承的类可以称作:超类,父类,基类
class Human:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
class Student(Human):
子类的构造函数必须调用父类的构造函数
私有属性:可以被继承到,但是我们无法直接使用,只能通过父类定义的公有方法来进行操作
def __init__(self, name, age):
super().__init__(name, age)
def show_info(self):
print(self.name)
s1 = Student("张三",20)
s1.show_info()
print(s1.get_age())
class MyStr(str):
def __sub__(self, other):
if self.isdigit() and other.isdigit():
return str(int(self) - int(other))
def __add__(self, other):
if self.isdigit() and other.isdigit():
return str(int(self) + int(other))
else:
return super().__add__(other)
继承的作用
1.修改父类的方法
2.扩展父类的方法
3.重复利用已有的方法
s1 = MyStr("123")
s2 = MyStr("23a")
s3 = s1 + s2
print(s3)
继承一下int类
修改 + 法运算 让整型相加的结果是拼接
二、面向对象的三大基本特征之三多态
1、 class Animal:
def speak(self):
pass
class Dog(Animal):
函数的重写:当实例调用的函数在父类和子类中都存在,优先调用自己的
def speak(self):
函数重写,可以在内部调用父类的同名函数
super().speak()
print("汪")
class Cat(Animal):
def speak(self):
super().speak()
print("喵")
class Tiger:
def speak(self):
print("wow")
def animal_speak(animal: Animal) -> None:
animal.speak()
d = Dog()
animal_speak(d)
c = Cat()
animal_speak(c)
t = Tiger()
animal_speak(t)
2、 函数的重载:同名不同参函数。
python中不存在函数重载,但是在面向对象中可以通过@Property装饰间接的实现函数的重载
详见封装的第三种方式
def add(a, b):
return a + b
def add(a, b, c):
return a + b + c
print(add(10, 20, 30))