1、单继承
类可以从一个基类继承。这种继承形式被称为单继承。
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
# a=self.length * self.width
# return a
# reactangle_area = Rectangle(3,4)
# # print(f'长方形的面积是:{reactangle_area.area()}')
# print(reactangle_area.area())
class Square(Rectangle): # Square 继承了Rectangle的所有属性和方法
def __init__(self,length,width): # 重写父类的init方法
if length==width:
super(Square,self).__init__(length,width) # 调用父类的init方法
else:
print('这不是一个正方形')
b=Square(10,10)
print(b.area())
class Wukong:
def test001(self):
kwargs = {'name': '孙悟空', 'age': '18'}
return kwargs
class Sun(Wukong):
def test001(self, **kwargs):
res = super().test001() # 调用父类test001的内容
res['sex'] = '男' # 在父类的基础上再去增加性别的键值对
return res
pass
to = Sun()
print(to.test001())
2、多继承
如果有多个基类,则需要全部都写在括号里,这种情况称为多继承。
(1) 在继承中基类初始化方法init不会被自动调用。如果希望子类调用基类的init方法,需要在子类的init方法中显示调用了它。
(2)在调用基类的方法时,需要加上基类的类名前缀,且带上sel参数变量。注意在类中调用该类中定义的方法时不需要self参数。
(3)Python总是首先查找对应类的方法,如果在子类中没有对应的方法,Python才会在继承链的基类中按顺序查找。
class Base:
def play(self):
print('我是你祖宗')
class A(Base):
def play(self):
print("我是祖宗的儿子")
class B(Base):
def play(self):
print('我是祖宗的女儿')
class C(B,A): # 谁先继承就用谁
pass
c = C()
c.play() # 我是祖宗的女儿
3、call方法
使用call方法,可以使类的实例像函数一样被调用
class Adder:
def __init__(self, number):
self.number = number
def __call__(self, other):
return self.number + other
# 创建一个 Adder 实例
adder = Adder(5)
# 调用这个实例,就像调用一个函数一样
result = adder(3)
print(result) # 输出: 8
# 这个例子中,Adder类有一个初始化方法__init__,它接受一个参数number,并将其保存在实例变量self.number中。Adder类还定义了一个__call__方法,
# 它接受另一个参数other,并将self.number和other相加,然后返回结果。
# 当创建了一个Adder类的实例adder,并用数字5初始化它之后,我们就可以像调用函数一样调用这个实例,并传入另一个参数(在这个例子中是3)。adder(3)
# 实际上是adder.__call__(3),因此会返回8