ad

打开《Python 编程与应用实践》_成为Python大佬_6.4.5 构造方法_ _init__() 的使用

网友投稿 134 2023-11-13

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

6.4.5 构造方法_ _init__() 的使用

前几节中我们已经尝试着去使用__init__ 方法,在Python 中 , init__ 方法 是一种特殊的方法,方法名的开始和结束都是双下划线,该方法称为构造方法,也叫构造 函数,用于设置属性的初始值,只要创建类的实例,构造方法就会自动执行。构造函数的 语法格式如下:

def __init__():

函数体

构造函数举例:

class Animal():

打开《Python 编程与应用实践》_成为Python大佬_6.4.5 构造方法_ _init__() 的使用

def __init__(self):

print(" 我 是 init__ 方法")

def run(self):

print("我是方法")

a=Animal()

a.run()

输出结果:

我是 init__ 方法

我是 run 方法

我们看到只要创建了Animal 类的实例对象 a, 构造方法就自动执行了。

提示: init__ 方法可有可无,但是子类一旦定义,就必须显示调用父类的 __init__ 方法,

6.5 组合

当我们定义一个类以后,并不是单一地使用它,我们还要把它创建的实例融入其他类 中,与不同数据类型的对象一起使用,不断地将它们嵌入到新的代码里面,通常情况下我 们把类当成一个模块来使用。使用组合 (composition) 或聚合 (aggregation) 就可以让 不同的类混合并加入其他类中,来增加功能和代码的复用率。用户可以在一个比较大的类 中创建一个新类的实例,实现一些其他属性和方法来对原来的类功能进行增强。用户也可 以通过派生的方法来使用类,我们将在下一节中讨论派生。举例:

class Teacher():

def __init__(self,action):

self.action=action

class Doctor():

def __init__(self,career):

self.career=career

class Worker():

def __init__(self,teacher,doctor):

self.teacher=teacher

self.doctor=doctor

def about(self):

print(teacher.action)

print(doctor.career)

teacher=Teacher( '老师给学生传授知识)

doctor=Doctor( '医生为病人看病)

worker=Worker(teacher,doctor)

worker.about()

输出结果:

老师给学生传授知识

医生为病人看病

以上代码我们首先定义了Teacher 类、Doctor 类以及 Worker 类三个类,老师和医生 也相当于工人类,只不过做的事不一样,当我们在 Worker 类中需要用到 Teacher 和 Doctor的实例对象的时候,我们其实就是直接把他们对应的对象 teacher 和 doctor 通过 Worker(teacher,doctor) 传递到Worker 类中去,我们并不需要在 Worker 类中去重新 定义 Teacher 和 Doctor 这两个类,因此 Worker 类就成了它自己和其他类的组合,这样就 节省了编码的时间和精力,而且最后的结果是易于维护的代码,这就是使用组合的优点。

6.6 子类和派生

通过6.5节的学习我们知道使用组合可以将类与类进行组合,和其他数据类型及逻辑 执行流混合使用。组合可以让那些小类成为大类更好的组成部分,但是如果我们要在相同 的类中去实现不同的功能,我们就需要用到派生。

在学习继承的时候我们有提到过子类和父类,回顾之前的代码:

class Animal(object):

def run(self):

print("animal is running…")

class Dog(Animal):

def run(slef):

print("a dog")

class Cat(Animal):

def run(slef):

print("a cat")

Animal 类就是Dog 类和Cat 类的父类,Dog 类和 Cat 类都是属于 Animal 类的子类, 子类的定义和我们的类定义语法一样,都是用关键字 class,语法为:

class 类名(父类类名1,父类类名2, … ,父类类名 n):

代码体

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

上一篇:学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_1.3 Python 基本语法
下一篇:打开《Python 可视化数据分析》_学会挖掘大数据的价值_2.2 Python 数据类型
相关文章

 发表评论

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

×