一、类定义和使用

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课相关推荐

  1. python列表和字典_2020/11/18 python学习第5课 列表和字典

    python学习第5课 列表和字典 课程目标 熟练掌握列表.字典中元素的增删改查 理解列表和字典的区别 课程难点 列表与字典增删改查的异同 正确使用切片,深刻理解切片时冒号左右数字的意义 课程知识点总 ...

  2. Python学习第七课-元组字典集合

    Python学习第七课-元组&字典&集合 一.元组 1.1元组简介 1.2元组的拆包 1.3字符串拆包 1.4列表的拆包 1.5拆包练习 二.字典的简介 2.1介绍 2.2操作 三.字 ...

  3. Python学习第三课-基本数据类型

    Python学习第三课-基本数据类型 一.基本概念 1.1表达式 1.2语句 1.3程序 1.4函数 内置函数 自定义函数 参数 返回值 二.标识符 2.1 关键字 2.2标识符概念 驼峰命名法 下划 ...

  4. Python学习第六课-列表

    Python学习第六课-列表 一.序列 1.1 概念 1.2分类 二.列表 2.1 概念 2.2 练习 三.切片 3.1 可切片对象的索引方式 3.2切片操作 3.3 练习 四.通用操作 4.1 序列 ...

  5. Python学习第001课--课后复习

    今日是学习python的第001课,本节课主要学习了编程语言的定义及计算机的硬件基础. 一.什么是编程语言?什么是编程? 语言是一个事物与另一个事物沟通的介质: 编程语言是程序员与计算机沟通的介质: ...

  6. 1、Python学习笔记第一课:python介绍

    python学习第一课 python介绍: 1.python是一种解释性,面向对象语言. 2.特点: (1):可读性强: (2):简洁,生产效率高: (3):面向对象: (4):免费和开源: (5): ...

  7. Python学习,第一课(基础知识,利用urllib库入门)

    Python学习第一课(不怕失败,爬虫就是要爬点东西回来) 基本知识 第一课,第一个小爬虫 锁定目标 导入需要的库 良好的习惯 开始干活,做好失败的准备. 失败是成功他娘,下一课一定要搞到数据. 基本 ...

  8. python学习历程第一课:print

    作为一个零基础的新手,英语也不好,入门python已经找了很多教程,很多互动学习平台,以及纸质书籍,历经三年,依旧止步于会写print("hello word")这是一个极度打击学 ...

  9. python学习第四课

    #!/user/bin/env python #-*-coding:utf-8-*- # 一.字符串魔法 # (1).isalpha()是否是字母或汉字. # 例: # a="张san22& ...

最新文章

  1. jointGrid,边际的颜色和hue保持一致,添加title
  2. 【数据结构与算法】之深入解析KMP算法的核心原理和实战演练
  3. eclipse查看Android应用内存使用情况
  4. [BZOJ 2424][HAOI2010]订货(费用流)
  5. [CQOI]九连环(FFT优化+高精)
  6. spring mvc全局异常处理,注解实现
  7. java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!!
  8. C Runtime Library来历, API, MFC, ATL关系
  9. 文件系统权限引起IIS站点总跳登录页面
  10. 计算机中函数counta是什么意思,excel中counta函数和count函数的区别是什么?
  11. 奥维kml文件制作工具_如何将平面控制点导入Google Earth、奥维互动地图及手机奥维互动地图APP里面?...
  12. 一种成熟的MODBUS上位机软件(MThings) 永久免费中文,可用于调试测试工具助手
  13. Google Chrome 提示 Adobe Flash Player 不是最新版本
  14. 计算机系换届视频,计算机科学与技术系学生会换届方案
  15. 独孤求败-小滴云架构大课十八式【xiaoecf】
  16. android 点击对话框按钮 不关闭按钮,Android在单击PositiveButton后不要关闭AlertDialog...
  17. aid learning安装应用_aidlearning下载-Aid Learning 安卓版v0.80-PC6安卓网
  18. 用c语言实现动态优先权调度,实验四使用动态优先权的进程调度算法的模拟..doc...
  19. 科目二 起步准备工作 LTS
  20. 优雅编程之阿里巴巴开发规范分享及扩展学习(三十八)

热门文章

  1. 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)G - 幼儿园战争...
  2. RNNoise: Learning Noise Suppression(深度学习噪声抑制)(2)
  3. ubuntu vim的 保存退出方法
  4. 《大江大河2》中教科书般的精神自救-如何让反感你的人欣赏你
  5. ckeditor4 自定义组件之文字格式组件,类加粗,类下划线(vue项目)
  6. 基于STM32的ESP8266模块控制多路继电器
  7. 数字媒体技术基础之三:分辨率
  8. 快速实现Thread Mesh组网详解
  9. mysql中null值求和_sql求和涉及到null值
  10. 关于音视频直播技术的总结