Python中的继承是面向对象编程(OOP)中的一个核心概念,它允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。通过继承,可以重用代码,提高代码的模块化和可维护性。在Python中,继承是通过语法实现的,其中父类提供属性和方法的定义,而子类继承父类的属性和方法,并根据需要添加或修改这些属性和方法。
-
多态性:多态性是面向对象编程中的一个重要概念,它允许我们使用相同的接口处理不同类型的对象。在Python中,多态性可以通过继承和方法的覆盖来实现。例如,如果有一个Animal类和Dog类,它们都有一个speak方法。当我们调用speak方法时,Python会根据对象的类型来决定调用哪个类的speak方法。
-
封装和抽象:封装和抽象是面向对象编程中的另外两个重要概念。封装是指将属性和方法组合在一起形成一个对象,并隐藏内部的实现细节。抽象是指定义一个接口但不实现其中的方法,让子类去实现这个接口。在Python中,可以使用类和继承来实现封装和抽象。
-
多重继承:Python支持多重继承,即一个类可以继承自多个父类。这种机制提供了更大的灵活性,允许开发者根据需要组合多个父类的特性。
通过继承,Python实现了代码的重用和扩展性,使得开发更加高效和易于维护。同时,多态性、封装和抽象等概念的应用,使得Python的面向对象编程更加丰富和强大
父类
calss Rectangle:
def __init__(self.lenght,with):初始化方法
self.length=lenght
self.width=with
def perimiter(self): #计算周长
return (self.length*self.width)*2
def features(self): #计算面积
return self.length*self.width
@classmethod #装饰器,声明下面的方法是类方法
def features(cls):
print("两边长相等,两边宽叶相等,长和宽的角度是90度")
rec=Rectangle(10,8)#实例化方法
rec.features()
Rectangle.features()#把features变成类方法类方法既可以由实例调用,也可以由类调用
子类
#写一个正方形
#完全继承
#class Square(Rectangle): #Rectangle是Square的父类
# pass
#squ=Squeare(6,6)
#print(squ.perimiter())
#print(squ.area())
#部分继承,重写某些父类
class Square(Rectangle):
def __init__(self,side): #初始化方法
self.length=side #重新定义长和宽
self.width=side
squ=Squeare(6)
print(squ.perimiter())
print(squ.area())
#改写父类方法,保留父类方法的同时,加一些子类代码
class Square(Rectangle):
@Classmethod
def features(cls):
super().features() #继承父类features()方法的代码
print('长和宽也相等')
Square.features()
所有的类都是object的子类,一个类无论是否声明机车呢个object,实际上都继承了
class Class2:
pass
print(class2.__dict__)#显示类的属性
print(class2.__doc__)#显示类的注释
print(class2.__name__)#显示类的名称
print(class2.__base__)#显示父类的名称
print(class2.__bases__)#显示所有父类的名称
多继承
一个类可以有多个父类
调用多个父类中的同名方法是,按继承顺序进行调用
#多继承
class Money1:
def money(self):
peint('一个亿')
class Money2:
def money(self):
peint('两个亿')
class Human(Money1,Money2):优先输出Money1
pass
#class Human(Money2,Money1):优先输出Money2
# pass
man=Human()
man.money()
多态
不同的类中有同名的方法,调用方法时,根据对象的不同,实现操作也不同,称之为多态
比如,调用狗的叫的方法为狗叫,调用猫叫方法为猫叫,简单可以描述为:两个同时受到一件事情的刺激,所作出的相同或不同反应
class Dog:
def say(self)
print("汪汪汪")
class Cat:
def say(self):
print("喵喵喵")
dog=Dog()
cat=Cat()
def animal_say(obj):
obj.say()
animal_say(dog)
animal_say(cat)
扩展
申明一个方发是一个属性,而不是一个方法
#@property 声明下面的方法是一个属性,而不是方法
class Class1:
def __init__(self):
self.a=100
@property
def fun2(self):
return self.a
tt1=Class1()
print(tt1.b())
#@property 增加代码隐蔽性,如果不想让其他人使用或修改这个代码,可以使用这个代码