python学习-第9课
一、类定义和使用
1.1.类定义
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
创建类:
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体类的帮助信息可以通过ClassName.__doc__查看。
class_suite 由类成员,方法,数据属性组成。
示例:
class EmployeeInfo(object):
"所有员工的基类"
empCont=0
def __init__(self,name,salary):
self.name=name
self.salary=salary
self.empCont+=1
def displayCount(self):
print("Total Employee {0}".format(self.empCont))
def displayEmployee(self):
self.displayCount()
print("Name: {0},Salary: {1}".format(self.name,self.salary))
employeeInfo=EmployeeInfo("test","6500")
employeeInfo.displayCount()
employeeInfo.displayEmployee()
employeeInfo.name
通过以上示例可以看出:
1.类的名称定义采用驼峰规则,即每个单词的首字母为大写,其余为小写
2.定义的类都继承object基类
3.类一般是由很多函数组成,每个函数的第一个参数必须为self,实例化参数赋值时忽略不计
4.类变量:如果类需要一个全局变量,可以在类的内部定义,如empCont,但是类的内部调用定义的函数或变量时,需要在名称添加self.,即用self.函数名或self.变量名,如self.empCont
5.self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数
1.2.类对象
类对象支持两种操作:属性引用和实例化。如示例中的变量empCont,函数displayCount和displayEmployee都是类对象
1.2.构造函数
def __init__(self,name,salary):
self.name=name
self.salary=salary
self.empCont+=1类在初始化的时候,首先必须要执行的函数
1.3.类型的实例化
要创建类的实例,可以使用类名调用该类,并传递其__init__方法接受的任何参数。如:
employeeInfo=EmployeeInfo("test","6500")
1.4.访问类的属性
前提:需要进行类的实例化
可以使用带有对象的点(.)运算符来访问对象的属性。 类变量将使用类名访问如下 :
employeeInfo.displayCount()
employeeInfo.displayEmployee()
1.5.类的继承及多继承
1.5.1.单继承
通过对父类的继承,子类可以使用父类的函数及非私有的变量
示例:
#父类
class Bank():
__CenterInfo=str()
name=str()
address=str()
def __init__(self,name,address):
self.name=name
self.address=address
def displayName(self):
print("当前的银行的名称为:{0}".format(self.name))
def displayAddress(self):
print("此银行的地址为:{0}".format(self.address))
#子类
class GongShang(Bank): #括号内被继承的父类
def introduceBank(self):
print("这是一家国企,是个弱势群体")
gongShang=GongShang("工商银行","江苏镇江扬州")
gongShang.displayName()
gongShang.displayAddress()
gongShang.introduceBank()
print("##"*30)
gongShang2=GongShang("中国工商银行","江苏分行")
print("变量名name实例化:{0}".format(gongShang2.name))
print("变量名address实例化:{0}".format(gongShang2.address))
子类GongShang通过继承父类Bank,可以调用父类的函数displayName、displayAddress及变量name、address
1.5.2.多继承
一个子类可以继承多个父类
示例:
#父类
class Bank():
__CenterInfo=str()
name=str()
address=str()
def __init__(self,name,address):
self.name=name
self.address=address
print("中国央行规定")
def displayName(self):
print("当前的银行的名称为:{0}".format(self.name))
def displayAddress(self):
print("此银行的地址为:{0}".format(self.address))
def makeRule(self):
print("我是中国最有钱的机构")
class WorldBank():
country=str()
cityNum=int()
def __init__(self,country,cityNum):
self.country=country
self.cityNum=cityNum
print("世界银行发表声明")
def cityInfo(self):
print("世界银行总部大楼在{0},可以给所在的城市提供{1}城市编号".format(self.country,self.cityNum))
def sayInfo(self):
print("我们需要中国银行提供存款信息")
#子类
class GongShang( Bank,WorldBank): #分别继承了Bank和WorldBank类
def displayName(self):
super(GongShang, self).displayName()
print("{0}重写了此方法,请注意".format(self.name))
def introduceBank(self):
print("这是一家国企,是个弱势群体")
class JianShe( WorldBank,Bank): #分别继承了WorldBank和Bank类
def sayBank(self):
print("银行存钱可以不用预约,但取钱需要提前预约")
gongShang=GongShang("工商银行","江苏镇江扬州")
gongShang.displayName()
gongShang.displayAddress()
gongShang.sayInfo()
print("**"*30)
jianShe=JianShe("美国",56)
jianShe.cityInfo()
jianShe.sayInfo()
jianShe.sayBank()
jianShe.makeRule()
1.6.方法重写
在有继承关系的类中,如果子类想要修改父类中的方法,可以在子类对父类的方法重新定义,即重写
示例:
#父类
class Bank():
__CenterInfo=str()
name=str()
address=str()
def __init__(self,name,address):
self.name=name
self.address=address
print("中国央行规定")
def displayName(self):
print("当前的银行的名称为:{0}".format(self.name))
def displayAddress(self):
print("此银行的地址为:{0}".format(self.address))
#子类
class GongShang(Bank):
def displayName(self): #重写父类的display方法
print("{0}重写了此方法,请注意".format(self.name))
def introduceBank(self):
print("这是一家国企,是个弱势群体")
gongShang=GongShang("工商银行","江苏镇江扬州")
gongShang.displayName()
gongShang.displayAddress()
结果
中国央行规定
工商银行重写了此方法,请注意
此银行的地址为:江苏镇江扬州
如果子类重写了父类的方法,但希望父类的方法继续执行,可以使用super调用父类的方法
示例:
#父类
class Bank():
__CenterInfo=str()
name=str()
address=str()
def __init__(self,name,address):
self.name=name
self.address=address
print("中国央行规定")
def displayName(self):
print("当前的银行的名称为:{0}".format(self.name))
def displayAddress(self):
print("此银行的地址为:{0}".format(self.address))
#子类
class GongShang(Bank):
def displayName(self):
super(GongShang, self).displayName() #执行父类的displayName方法,同时也执行了子类的displayName方法
print("{0}重写了此方法,请注意".format(self.name))
def introduceBank(self):
print("这是一家国企,是个弱势群体")
gongShang=GongShang("工商银行","江苏镇江扬州")
gongShang.displayName()
gongShang.displayAddress()
结果
中国央行规定
当前的银行的名称为:工商银行
工商银行重写了此方法,请注意
此银行的地址为:江苏镇江扬州
1.7.类的私有属性及私有方法
1.7.1.类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
示例
class JustConter():
__secretCount=0 #私有变量
publicCount=0 #公共变量
def count(self):
self.__secretCount+=1
self.publicCount+=1
print("类中打印私有变量:{0}".format(self.__secretCount))
counter=JustConter()
counter.count()
print("类实例化,打印公共变量:{0}".format(counter.publicCount))
print("类实例化,打印私有变量:{0}".format(counter.__secretCount)) #报错,实例不能访问私有变量
结果
Traceback (most recent call last):
File "D:/pythoncode/LivePython02/12第九节课/test9003.py", line 19, in <module>
print("类实例化,打印私有变量:{0}".format(counter.__secretCount)) #报错,实例不能访问私有变量
AttributeError: 'JustConter' object has no attribute '__secretCount'
类中打印私有变量:1
类实例化,打印公共变量:1
1.7.2.类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。
示例
class Site():
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('这是私有方法')
def foo(self): # 公共方法
print('这是公共方法')
self.__foo()
x = Site('普惠数码', 'www.phdata.cn')
x.who() # 正常输出
x.foo() # 正常输出
x.__foo() # 报错
结果
name : 普惠数码
url : www.phdata.cn
这是公共方法
这是私有方法
Traceback (most recent call last):
File "D:/pythoncode/LivePython02/12第九节课/test9004.py", line 26, in <module>
x.__foo() # 报错
AttributeError: 'Site' object has no attribute '__foo'
1.6.类的专有方法
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 乘方
示例:
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
def __add__(self,other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)
运行结果
Vector(7,8)
python学习-第9课相关推荐
- python列表和字典_2020/11/18 python学习第5课 列表和字典
python学习第5课 列表和字典 课程目标 熟练掌握列表.字典中元素的增删改查 理解列表和字典的区别 课程难点 列表与字典增删改查的异同 正确使用切片,深刻理解切片时冒号左右数字的意义 课程知识点总 ...
- Python学习第七课-元组字典集合
Python学习第七课-元组&字典&集合 一.元组 1.1元组简介 1.2元组的拆包 1.3字符串拆包 1.4列表的拆包 1.5拆包练习 二.字典的简介 2.1介绍 2.2操作 三.字 ...
- Python学习第三课-基本数据类型
Python学习第三课-基本数据类型 一.基本概念 1.1表达式 1.2语句 1.3程序 1.4函数 内置函数 自定义函数 参数 返回值 二.标识符 2.1 关键字 2.2标识符概念 驼峰命名法 下划 ...
- Python学习第六课-列表
Python学习第六课-列表 一.序列 1.1 概念 1.2分类 二.列表 2.1 概念 2.2 练习 三.切片 3.1 可切片对象的索引方式 3.2切片操作 3.3 练习 四.通用操作 4.1 序列 ...
- Python学习第001课--课后复习
今日是学习python的第001课,本节课主要学习了编程语言的定义及计算机的硬件基础. 一.什么是编程语言?什么是编程? 语言是一个事物与另一个事物沟通的介质: 编程语言是程序员与计算机沟通的介质: ...
- 1、Python学习笔记第一课:python介绍
python学习第一课 python介绍: 1.python是一种解释性,面向对象语言. 2.特点: (1):可读性强: (2):简洁,生产效率高: (3):面向对象: (4):免费和开源: (5): ...
- Python学习,第一课(基础知识,利用urllib库入门)
Python学习第一课(不怕失败,爬虫就是要爬点东西回来) 基本知识 第一课,第一个小爬虫 锁定目标 导入需要的库 良好的习惯 开始干活,做好失败的准备. 失败是成功他娘,下一课一定要搞到数据. 基本 ...
- python学习历程第一课:print
作为一个零基础的新手,英语也不好,入门python已经找了很多教程,很多互动学习平台,以及纸质书籍,历经三年,依旧止步于会写print("hello word")这是一个极度打击学 ...
- python学习第四课
#!/user/bin/env python #-*-coding:utf-8-*- # 一.字符串魔法 # (1).isalpha()是否是字母或汉字. # 例: # a="张san22& ...
最新文章
- jointGrid,边际的颜色和hue保持一致,添加title
- 【数据结构与算法】之深入解析KMP算法的核心原理和实战演练
- eclipse查看Android应用内存使用情况
- [BZOJ 2424][HAOI2010]订货(费用流)
- [CQOI]九连环(FFT优化+高精)
- spring mvc全局异常处理,注解实现
- java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!!
- C Runtime Library来历, API, MFC, ATL关系
- 文件系统权限引起IIS站点总跳登录页面
- 计算机中函数counta是什么意思,excel中counta函数和count函数的区别是什么?
- 奥维kml文件制作工具_如何将平面控制点导入Google Earth、奥维互动地图及手机奥维互动地图APP里面?...
- 一种成熟的MODBUS上位机软件(MThings) 永久免费中文,可用于调试测试工具助手
- Google Chrome 提示 Adobe Flash Player 不是最新版本
- 计算机系换届视频,计算机科学与技术系学生会换届方案
- 独孤求败-小滴云架构大课十八式【xiaoecf】
- android 点击对话框按钮 不关闭按钮,Android在单击PositiveButton后不要关闭AlertDialog...
- aid learning安装应用_aidlearning下载-Aid Learning 安卓版v0.80-PC6安卓网
- 用c语言实现动态优先权调度,实验四使用动态优先权的进程调度算法的模拟..doc...
- 科目二 起步准备工作 LTS
- 优雅编程之阿里巴巴开发规范分享及扩展学习(三十八)
热门文章
- 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)G - 幼儿园战争...
- RNNoise: Learning Noise Suppression(深度学习噪声抑制)(2)
- ubuntu vim的 保存退出方法
- 《大江大河2》中教科书般的精神自救-如何让反感你的人欣赏你
- ckeditor4 自定义组件之文字格式组件,类加粗,类下划线(vue项目)
- 基于STM32的ESP8266模块控制多路继电器
- 数字媒体技术基础之三:分辨率
- 快速实现Thread Mesh组网详解
- mysql中null值求和_sql求和涉及到null值
- 关于音视频直播技术的总结