ad

打开《Python 编程与应用实践》_成为Python大佬_6.4.1 方法的覆盖

网友投稿 112 2023-11-13

【摘要】 本书摘自《Python 编程与应用实践》一书中第6章,第4节,由冯伟森,王建,杨宁主编。

6.4 方法

6.4.1 方法的覆盖

通过6.3节的学习,我们知道了新创建的子类会自动继承父类的所有信息。下面我们 试着改写一下6.3节的两个子类的定义:

打开《Python 编程与应用实践》_成为Python大佬_6.4.1 方法的覆盖

class Dog(Animal):

def run(slef):

print("a dog")

class Cat(Animal):

def run(slef):

print("a cat")

此时,我们的 Dog类和Cat 类都具有一个自己的run() 方法,接着写完下面的代码运 行看看结果如何:

dog_one=Dog()

cat_one=Cat()

dog_one.run()

cat_one.run()

输出结果:

a dog

a cat

通过结果我们可以看出,Dog类和Cat 类的对象创建了以后,执行的是它们自己所属 类的run() 方法,并没有去执行父类Animal的 run() 方法,我们把这种现象叫作方法的覆 盖。试一下如下代码:

先创建三个类:

class Animal(object):

def init(self,name):

self.name=name

print(self.name)

class Dog(Animal):

def init(self,name):

self.name="dog:"+name

print(self.name)

class Cat(Animal):

def init(self,name):

self.name="Cat:"+name

print(self.name)

利用建的类去定义三个对象,并利用对象去调用各自的__init__ 方法: animal=Animal()

dog_one=Dog()

cat_one=Cat()

animal.init("豆豆")

dog_one.init(" 豆豆")

cat_one.init(" 豆豆")

输出结果:

豆豆

dog: 豆豆

Cat: 豆豆

从输出结果我们可以看出,虽然我们传给三个类对象的 name 属性都一样,但是存放 在对象里面的 name 特性却不一样, 一个是 Dog 类, 一个是 Cat 类,当然还有父类的 Animal类。在类的继承中,子类可以覆盖任何父类的方法。

6.4.2 方法的添加

通过6.4.1的学习,我们知道了子类可以继承父类的方法,也可以覆盖父类的方法, 那么子类能够自己定义新方法吗?答案是肯定的,在Python 中,子类可以添加父类没有 的方法,我们看一看如下的代码。

首先我们定义两个类: Animal 类和 Dog 类 ,Dog 类继承了 Animal类,Dog 类自己 定义了一个新方法 claim():

class Animal(object):

def run(self):

print("Animal is running…")

class Dog(Animal):

def claim(self):

print("I am a dog")

然后我们利用Dog 类生成一个对象 dog_one, 并利用这个对象调用claim() 方法: dog_one=Dog()

dog_one.claim()

输出结果: I am a dog

我们可以看到 Dog类作为 Animal类的子类,它可以自己定义属于本类的新方法,也 可以继承父类原有的方法,我们在实际编程中,可以根据需要定义新方法或者去继承那些 已有的、良好的类中的方法,在简化代码的同时提高代码编写的质量。

6.4.3 super 的使用

在 Python 中,当子类需要调用父类的方法时就可以用 super() 进行操作。我们还是 利用前几节中的动物例子,下面我们通过代码来看一下 super() 的使用。

首先,依旧是定义两个类: Dog 类继承 Anima 类,两个类中都定义了 init__ 方 法,只不过参数的个数不一样:

class Animal():

def __init__(self,action):

self.action=action

class Dog(Animal):

def __init__(self,action,name):

super().__init__(action)

self.name=name

接下来,我们利用Dog 类生成一个对象,并给这个对象传递 action 和name 这两个属 性值:

dog_one=Dog('running','dog')

最后,我们利用 dog_one 这个对象去访问 action 和 name 的属性值:

print(dog_one.action)

print(dog_one.name)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_9.1 爬虫框架
下一篇:实战之路《Excel 数据处理与分析实战宝典_第2版》_8.6 INDIRECT 函数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×