python面向对象-1方法、构造函数

类是指:描述一种事物的定义,是个抽象的概念 
实例指:该种事物的一个具体的个体,是具体的东西 

打个比方: 
“人”是一个类。“张三”是人类的一个具体例子 

在编程时也是同样的道理,你先自己定义一个“类”,当你需要用时,用“类”的定义来创造一个具体的例子。 

用类的定义来创建一个实例,就叫做类的实例化。
实例化过程就是调用类的构造函数,完成该实例的数据分配

下面用一个洗衣机的例子来演示:

这个是一个简单的手动洗衣机 w 实例化了Washer类:

 1 #class Washer:
 2 class Washer:#定义一个Washer类
 3 
 4     def __init__(self): #这是定义类的构造函数,也是一个特殊的实例方法
 5         self.water=0   #实例的属性(变量)
 6         self.scour=0
 7 
 8     def add_water(self,water):#实例的方法(函数),可以接受实例化后传过来的参数给类内实例变量,又因为实例继承了类的属性和方法,所以
 9     #相当于传递给了类的实例化对象的实例变量
10         print('Add water:',water)
11         self.water=water#在类的方法内引用实例变量用 self.属性名
12 
13     def add_scour(self,scour):
14         self.scour=scour
15         print('Add scour:',scour)
16 
17     def start_wash(self):
18         print('Start wash...')
19         
20 if __name__=='__main__':
21     w=Washer()#类的实例化
22     w.add_water(10)#传递参数到实例变量
23     w.add_scour(2)
24     w.start_wash()

执行结果:

 

类内定义实例方法需要手动加上self参数(如第4行),但在类实例化后调用这个方法时不必手动加self参数,python会自动添加,如第22行。

实例化方法是 w=Washer()  ,可以看出需要在类后加一个括号。

类外调用类内定义的实例方法可以 实例名.方法名() ,例如

w.add_scour(2),必要的时候加上参数。

 


 下面改动一下程序,弄成半自动洗衣机,即在类的内部,方法之间相互调用。

washa.py:

 1 class Washer:
 2 
 3     def __init__(self):
 4         self.water=0
 5         self.scour=0
 6 
 7     def set_water(self,water):
 8         self.water=water
 9         self.add_water()
10 
11     def set_scour(self,scour):
12         self.scour=scour
13         self.add_scour()#在类内调用函数,用 self.方法名
14 
15     def add_water(self):
16         print('Add water:',self.water)
17 
18     def add_scour(self):
19         print('Add scour:',self.scour)
20 
21     def start_wash(self):
22         print('Start wash...')
23         
24 if __name__=='__main__':
25     w=Washer()
26     w.set_water(10)
27     w.set_scour(2)
28     w.start_wash()
29     

也可以改成:

 1 class Washer:
 2 
 3     def __init__(self):
 4         self.water=0
 5         self.scour=0
 6 
 7     def set_water(self,water):
 8         self.water=water        
 9 
10     def set_scour(self,scour):
11         self.scour=scour        
12 
13     def add_water(self):
14         print('Add water:',self.water)
15 
16     def add_scour(self):
17         print('Add scour:',self.scour)
18 
19     def start_wash(self):
20         self.add_water()
21         self.add_scour()
22         print('Start wash...')
23         
24 if __name__=='__main__':
25     w=Washer()
26     w.set_water(10)
27     w.set_scour(2)
28     w.start_wash()

运行结果:


做如下改动,用户可以不设置洗衣机加水和洗涤剂量也可以洗衣服:

 

 1 class Washer:
 2 
 3     def __init__(self):
 4         self.water=10#将实例属性修改为默认的标准洗衣程序需要的量
 5         self.scour=2
 6 
 7     def set_water(self,water):
 8         self.water=water        
 9 
10     def set_scour(self,scour):
11         self.scour=scour        
12 
13     def add_water(self):
14         print('Add water:',self.water)
15 
16     def add_scour(self):
17         print('Add scour:',self.scour)
18 
19     def start_wash(self):
20         self.add_water()
21         self.add_scour()
22         print('Start wash...')
23         
24 if __name__=='__main__':
25     w=Washer()
26 ##    w.set_water(10) #这两行代码注释掉,代表用户不必设置水和洗涤剂量
27 ##    w.set_scour(2)
28     w.start_wash()
29     

但是这样,只能加入10L水和2L洗涤剂,不好,要改进。用到构造函数。

 


 

 1 class Washer:
 2 
 3     def __init__(self,water=10,scour=2):
 4         self.water=water
 5         self.scour=scour
 6 
 7     def set_water(self,water):
 8         self.water=water        
 9 
10     def set_scour(self,scour):
11         self.scour=scour        
12 
13     def add_water(self):
14         print('Add water:',self.water)
15 
16     def add_scour(self):
17         print('Add scour:',self.scour)
18 
19     def start_wash(self):
20         self.add_water()
21         self.add_scour()
22         print('Start wash...')
23         
24 if __name__=='__main__':
25     w=Washer()
26     w.start_wash()
27 
28     wb=Washer(100,10)
29     wb.start_wash()
30 
31     wc=Washer(100,10)
32     wc.set_water(50)
33     wc.set_scour(5)
34     wc.start_wash()
35 
36     
37 
38     
39     

运行结果: 

构造函数可以使类在实例化时实例对象更加丰富,具有实例化不同种类的实例的作用。

 

转载于:https://www.cnblogs.com/zhubinglong/p/6945717.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj3503: [Cqoi2014]和谐矩阵

高斯消元解异或方程组。学了bitset。对比如下 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define REP(i,s,t) for(int is;i<t;i) #define dwn(i,s,t) for(int is;i>t;i--) #define clr(…

sys模块

与python解释器交互的模块 sys.argv 命令行参数List&#xff0c;第一个元素是程序本身路径 sys.exit(n) 退出程序&#xff0c;正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径…

Oracle中SQL语句学习五(统计分组语句group by和having)

oracle&#xff08;41&#xff09; 在 应用系统开发中&#xff0c;进行需要统计数据库中的数据&#xff0c;当执行数据统计时&#xff0c;需要将表中的数据进行分组显示&#xff0c;在统计分组中是通过group by子句、分组函数、having子句共同实现的。其中group by子句用于指定…

做开发十年,我总结出了这些开发经验

本文由云社区发表,原文转载地址:https://www.cnblogs.com/qcloud1001/p/10218876.html 在一线做了十年的开发&#xff0c;经历了网易、百度、腾讯研究院、MIG 等几个地方&#xff0c;陆续做过 3D 游戏、2D 页游、浏览器、移动端翻译 app 等。 积累了一些感悟。必然有依然幼稚的…

2016年4月 TIOBE 编程语言排行榜

4月头条: Visual Basic 正在渐行渐远 COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用。有很多软件使用这些语言来编写&#xff0c;并且发展的不亦乐乎。然而经过多年的发展&#xff0c;COBOL和FORTRAN逐渐被抛弃&#xff0c;而得益于微软的存在&#xff0c;BASIC…

基于zbus的MySQL透明代理(100行)

项目地址 https://git.oschina.net/rushmore/zbus 我们上次讲到zbus网络通讯的核心API&#xff1a; Dispatcher -- 负责-NIO网络事件Selector引擎的管理&#xff0c;对Selector引擎负载均衡 IoAdaptor -- 网络事件的处理&#xff0c;服务器与客户端共用&#xff0c;负责读写&am…

linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;关于PATH的作用PATH说简单点就是一个字符串变量&#xff0c;当输入命令的时候LINUX会去查找PATH里面记录的路径。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下…

python3 自动打包部署war包

2019独角兽企业重金招聘Python工程师标准>>> 1 调用maven 命令打包 mvn -B -f D:/workspace/ksdcourse clean package 2 调用tomcat 部署war包 &#xff1b; 需要添加 CATALINA_HOME的环境变量 代码如下&#xff1a; #!/usr/bin/python3# -*- coding: utf-8 -*-impo…

day1作业二:多级菜单操作

作业二&#xff1a;多级菜单 &#xff08;1&#xff09;三级菜单 &#xff08;2&#xff09;可以次选择进入各子菜单 &#xff08;3&#xff09;所需新知识点&#xff1a;列表、字典 要求&#xff1a;输入back返回上一层&#xff0c;输入quit退出整个程序 思路&#xff1a; &am…

JDK源码分析(5)之 HashMap 相关

HashMap作为我们最常用的数据类型&#xff0c;当然有必要了解一下他内部是实现细节。相比于 JDK7 在JDK8 中引入了红黑树以及hash计算等方面的优化&#xff0c;使得 JDK8 中的HashMap效率要高于以往的所有版本&#xff0c;本文会详细介绍相关的优化&#xff0c;但是主要还是写 …

位运算-查找数组中唯一成对的数

基础实例一&#xff1a;使用位运算判断数的奇偶性 实例代码&#xff1a; public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}// 与运算public static boolean isOdd(int i){return (i & 1) ! 0;…

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、创建一个xcode工程&#xff0c;single View就行&#xff0c;项目语言选择swift&#xff0c;oc的直接生成就行不用这么麻烦。 2、把跟目录上创建 node的package.json,执行命令 npm init npm install react-nati…

第二阶段站立会议08

站立会议内容&#xff1a; 大家准备继续将代码进行融合&#xff0c;进行测试对一些功能进行优化。 1、会议照片&#xff1a; 2、任务展板&#xff1a; 3、燃尽图&#xff1a; 转载于:https://www.cnblogs.com/smcoder/p/7002539.html

git——学习笔记(三)分支管理

一、创建、合并分支 每次提交&#xff0c;git都往后走一格&#xff0c;串成一跳时间线&#xff0c;head指向的是分支&#xff0c;分支指向提交。master是主分支&#xff0c;dev是另一条分支&#xff0c;分支就像指针一样&#xff0c;合并、删除分支时&#xff0c;修改的都是指针…

阿里巴巴是如何打通 CMDB,实现就近访问的?

CMDB在企业中&#xff0c;一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性&#xff0c;例如机器的IP、主机名、机房、应用、region等&#xff0c;这些数据一般会在机器…

[原创]K8_C段旁注工具6.0 新增SMB漏洞扫描

工具: K8_C段旁注工具6.0_0510[K.8]编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2017/5/24 13:25:54简介: 图片: 功能: 更新历史:6.0 20170510[] C段SMB漏洞扫描(探测系统版本)[] 批量操作-文本比较提取新增内容[] 旁注查…

【公告】社区周刊即日起停刊

各位订阅51CTO社区周刊的小伙伴们&#xff0c;大家好&#xff0c;我是51CTO社区的大管家蘑菇&#xff0c;今天来是想跟大家说&#xff0c;本期周刊将是我们最后一期邮件期刊&#xff0c;没错&#xff0c;是最后一期&#xff08;请珍惜它~&#xff09;。或许你会问&#xff0c;停…

springcloud-zuul路由网关

路由网关(zuul) 在微服务架构中&#xff0c;需要多个基础的服务治理组件&#xff0c;包括服务注册与发现、服务消费、负载均衡、断路器、智能 路由、配置管理等&#xff0c;由这个基础组件相互协作&#xff0c;共同组建了一个简单的微服务系统。一个简单的微服务系统如下 图 总…

python DB.fetchall()--获取数据库所有记录列表

查询到的数据格式为列表&#xff1a; 多个元素的列表&#xff1a; 单个元素的列表&#xff1a; 转载于:https://www.cnblogs.com/apple2016/p/5734161.html

Laravel Composer 命令大全

2019独角兽企业重金招聘Python工程师标准>>> ​​​​​​​1、安装 Laravel composer create-project --prefer-dist laravel/laravel 5.xx user-project 2、.env 文件操作 生成 APP_KEY&#xff1a;php artisan key:generate 缓存 .env 配置&#xff…