python继承类有参数_python面向对象——类的继承

本文详细介绍了Python面向对象编程中的类继承,包括如何调用父类属性和方法、重写父类方法、强制调用父类私有方法、调用父类的`__init__`方法以及继承父类初始化过程中的参数。通过实例展示了如何在子类中使用和覆盖父类的各种特性。
摘要由CSDN通过智能技术生成

转自:https://blog.csdn.net/yilulvxing/article/details/85374142

子类:Son类

父类:Father类

以下案例均表示Son类继承父类的一些属性和初始化参数构造等。

5个模块:

(1):直接调用父类属性方法;

(2):重写父类属性方法;

(3):强制调用父类私有属性方法;

(4):调用父类的__init__方法

(5):继承父类初始化过程中的参数

(1)调用父类属性方法

classFather():def __init__(self):

self.a='aaa'

defaction(self):print('调用父类的方法')classSon(Father):passson=Son() #子类Son 继承父类Father的所有属性和方法

son.action() #调用父类方法

son.a #调用父类属性

(2)重写父类属性方法

classFather():def __init__(self):

self.a='aaa'

defaction(self):print('调用父类的方法')classSon(Father):def __init__(self):

self.a='bbb'

defaction(self):print('子类重写父类的方法')

son=Son() #子类Son继承父类Father的所有属性和方法

son.action() #子类Son调用自身的action方法而不是父类的action方法

son.a

这里,子类Son已经重写了父类Father的action的方法,并且子类Son也有初始化,因此,子类会调用自身的action方法和属性。总结:如果子类没有重写父类的方法,当调用该方法的时候,会调用父类的方法,当子类重写了父类的方法,默认是调用自身的方法。

另外,如果子类Son重写了父类Father的方法,如果想调用父类的action方法,可以利用super()

#如果在重新父类方法后,调用父类的方法

classFather():defaction(self):print('调用父类的方法')classSon(Father):defaction(self):

super().action()

son=Son()

son.action()

(3)强制调用父类私有属性方法

classFather():def __action(self): #父类的私有方法

print('调用父类的方法')classSon(Father):defaction(self):

super()._Father__action()

son=Son()

son.action()

(4)调用父类的__init__方法

如果自己也定义了 __init__ 方法,那么父类的属性是不能直接调用的,比如下面的代码就会报错

classFather():def __init__(self):

self.a=aclassSon(Father):def __init__(self):passson=Son()print(son.a)

修改方法:可以在 子类的 __init__中调用一下父类的 __init__ 方法,这样就可以调用了

classFather():def __init__(self):

self.a='aaa'

classSon(Father):def __init__(self):

super().__init__()#也可以用 Father.__init__(self) 这里面的self一定要加上

son=Son()print(son.a)

(5)继承父类初始化过程中的参数

classFather():def __init__(self):

self.a=1self.b=2

classSon(Father):def __init__(self):

super().__init__()#也可以用 Father.__init__(self) 这里面的self一定要加上

defadd(self):return self.a+self.b

son=Son()print(son.add())

上述代码中,父类在初始化过程中,直接对a,b分别赋值1,2。子类利用super().__init__()继承了父类的初始化参数a和b,所以子类调用自身的add函数(add函数返回a和b的和)会返回结果值。

再看一下,如果不对父类初始化直接赋值,并且子类在调用父类初始化过程中,增加额外自身需要的初始化参数值。

说明:三个参数a,b,c,其中a,b来自父类初始化参数,c表示子类初始化参数,但又分为两种情况:

1):参数c为初始化默认参数,如下面的5.1代码中Son(1,2),参数1,2分别表示a,b的值,默认为c=10,即等于:Son(1,2,10),表明初始化传参过程中c可以不写

2):显式地将初始化参数c修改为其他值,如下面的5.2代码中Son(1,2,1),参数值1,2,1分别表示a,b,c的值,即显式地将c=1传入

具体代码如5.1 , 5.2所示,对比查看:

#5.1

classFather():def __init__(self,a,b):

self.a=a

self.b=bdefdev(self):return self.a -self.b#调用父类初始化参数a,b并增加额外参数c

classSon(Father):def __init__(self,a,b,c=10): #固定值: 例如默认c=10,也可以显示地将c赋值

Father.__init__(self,a,b)

self.c=cdefadd(self):return self.a+self.bdefcompare(self):if self.c > (self.a+self.b):returnTrueelse:returnFalse

son=Son(1,2) #由于c在初始化过程中默认为10,所以c可以不用显示表达出来

print(son.dev()) #调用父类dev函数

print(son.add()) #子类自身add函数

print(son.compare()) #子类自身compare函数

如果将上述5.1代码中,修改c为其他参数值(非默认值),改成显式地将c值传入

#5.2

classFather():def __init__(self,a,b):

self.a=a

self.b=bdefdev(self):return self.a -self.b#调用父类初始化参数a,b并增加额外参数c

classSon(Father):def __init__(self,a,b,c=10): #固定值: 例如默认c=10,也可以显示地将c赋值

Father.__init__(self,a,b)

self.c=cdefadd(self):return self.a+self.bdefcompare(self):if self.c > (self.a+self.b):returnTrueelse:returnFalse

son=Son(1,2,1) #显示地将c=1传入子类初始化函数

print(son.dev()) #调用父类dev函数

print(son.add()) #子类自身add函数

print(son.compare()) #子类自身compare函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值