python 类

类的继承与多态

1.继承

在面向对象程序设计中,用户可以先定义一个父类,通过父类用继承的方式来定义新类。新类就是子类,子类可以直接使用父类中的定义的属性和方法。通过继承方式可以很大的提高代码复用率。

1)单一继承

当一个子类继承父类只有一个时,称为单一继承。

语法格式:
class ChildClassName(FatherClassName):
		<语句1>
		...
		<语句n>

在继承结构中,父类的名称要写在括号中。
由于继承机制,子类可以使用父类中任何 公有 的属性和方法,因此,对一个子类来说,它的属性包括自定义属性和继承两部分,而它的方法也包括自定义和属性两部分。

例题:编写一个父类A,通过继承方式得到子类B,在子类中使用父类的方法:

class Fclass:
    def talk(self):
        print("people can talk.")
    def read(self):
        print('people can read.')
class CClass(Fclass):
    def eat(self):
        print("people can eat.")
t=CClass()
t.talk()
t.read()
t.talk()

运行结果:
在这里插入图片描述

2)多重继承

Python中不仅支持单一继承,还支撑多重继承。所谓多重继承,也叫多继承,指的是一个子类继承多个父类。

多继承的语法格式:

class ChildClassName(FatherClass1,...,FatherClassn):
	<语句1>
	...
	<语句2>

编写一个CClass,同时继承FClassA和FClassB,并在子类中调用父类方法。

class FclassA:
    def talk(self):
        print("people can talk.")
    def read(self):
        print('people can read.')
class FclassB:
    def write(self):
        print('peole can write')
class CClass(FclassA,FclassB):
    def eat(self):
        print("people can eat.")
t=CClass()
t.write()
t.talk()
t.read()
t.talk()

运行结果:
在这里插入图片描述

2.多态

多态是指方法的多态性,具体而言就是功能不同的方法使用同样的名称。多态的应用场景有两种,一类是类之间没有继承关系的多态,另一类是类之间有继承关系的多态。

1)无继承多态

如果彼此之间没有继承关系的类中,有方法名称重复,则出现了无继承关系的多态。不同类方法中,方法名名称相同,则需要在调用方法时给出不同的参数对象,而达到不同的实现功能。

解决不同类中方法调用的方式是,先定义一个同名方法,用该方法关联到不同类中,即将类名称作为一个方法的参数。

def <方法名称>(self,cls):
	cls.<方法名称>([参数列表])
然后对该方法进行调用,调用方法如下:
<方法名称>(<类名称()>)

定义多个类,类之间咩有继承关系,但是在不同类中都有同样的方法run(),并使用多态技术合理调用方法。

class Bird():
    def move(self):
        print("Bird can fly in the sky")
class Fish:
    def move(self):
        print("Fish can move in sea")
class Horse:
    def move(self):
        print("horse move in land")
class Animal:
    def move(self, cls):  #第二个参数cls用来关联类名称,将指定的类作为参数传给move()方法
        cls.move() #系统根据指定的类名称,决定调用指定类的同名方法。

t=Animal()
t.move(Bird())
t.move(Fish())
t.move(Horse())

在这里插入图片描述

2.有继承的多态

在有继承的情况下,如果父类和子类有同名方法,则相当于在子类中将父类的方法重写。此时用户调用子类实例就是子类方法。

对于方法构造而言,如果父类有构造方法,而子类没有构造方法,那么在定义子类实例时会自动执行父类的调用方法;如果子类有自己的构造方法,则在定义子类实例时,执行子类的构造方法。

在子类的构造方法中执行父类的构造方法:

super().__init__():

子这里需要注意的是调用父类的构造方法时,需要用到super()的前缀,表示当前类的父类,并且调用的位置是子类的构造方法内部。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值