使用excel统计学生成绩让相同学生分数名次相同-英雄云拓展知识分享
112
2023-11-13
【摘要】 本书摘自《Python 编程与应用实践》一书中第6章,第4节,由冯伟森,王建,杨宁主编。
6.4 方法
6.4.1 方法的覆盖
通过6.3节的学习,我们知道了新创建的子类会自动继承父类的所有信息。下面我们 试着改写一下6.3节的两个子类的定义:
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~