Python面向对象程序设计之类的定义与继承简单示例


Posted in Python onMarch 18, 2019

本文实例讲述了Python面向对象程序设计之类的定义与继承。分享给大家供大家参考,具体如下:

定义类:

class A:
  def __init__(self, name):
    self.name = name
  def say(self):
    print self.name
  def __del__(self):
    print "delete: %s" % self.name

1. python类的所有方法定义都必须至少含有一个参数,也就是self参数。在方法定义时作为第一个参数存在,self参数是类实例的引用。
2. __init__方法相当于构造函数,在获取类实例的时候会执行。
3. __del__方法相当于析构函数,会由系统自动调用(类似垃圾回收),也可以通过del对象主动调用。
4. 上例在__init__方法里定义了一个对象的变量name,可以在类内其他地方通过self.name引用。

获取类的实例并调用类方法:

a = A('Jim') #不用new
a.say() #Jim
A.say(a) #Jim

调用类的方法有两种方式:

1. 对象.方法名,此种方式self参数不需要指定,对象引用作为实参自动传入。
2. 类名.方法名,此种方式self参数需要指定为类实例的引用。

类变量和对象变量:

class A:
  pass
a = A()
print A.j #报错,因为A类中不存在类变量j
A.i = 1  #在A类中添加类变量i,并赋值1
print A.i #打印1
print a.i #打印1,这里的a.i实际上取到的是类A的类变量i,非对象a的对象变量i(其尚不存在)
a.j = 2  #在对象a中添加对象变量j,并赋值2
print A.j #报错,因为A类中不存在类变量j
print a.j #打印2
a.i = 3  #在对象a中添加对象变量i,并赋值3
b = A() 
print A.i #打印1,A.i取到的是A类中的类变量i
print a.i #打印3,a.i取到的是a对象中的对象变量i,取不到类A中的类变量i(因为重名优先获取对象变量)
print b.i #打印1,b.i取到的是A类中的类变量i

总结:

1. 对象的变量称为对象的域;类的变量称为类的域(相当于类静态变量)。类的域和方法合称类的属性。(我们没用域,而用了变量这个称呼)。
2. 类和对象的变量可以在类定义后随意添加。
3. 如果我们用 对象.i取用变量(取用而非赋值),会先试图取用对象变量i,若不存在则试图取用对象所属类中的类变量i,若还不存在则报错。
4. 可使用对象引用获取类变量值(在不存在重名的对象变量时),但不能用对象引用给类变量赋值(会创建同名对象变量)。

定义类变量:

在类内直接定义的变量是类变量,不属于某个特定对象,相当于静态变量,如:

class P:
  __pri = "private via"
  count = 1
print P.count #打印1
print P.__pri #报错,类P中没有名称为__pri的属性

1. 使用类变量通常用:类名.变量名
2. 类的属性默认是公有的;类定义中,变量名为双下划线开头的变量是私有的(依靠约定来保证)。

类的继承:

在类定义时,类名称后紧跟一个元组名,此类即为以元组的元素为父类的子类:

class SubClass(SuperClass):
   pass
class SubClass(SuperClass1, SuperClass2):
   pass

1. 若类没有显式的定义__init__方法,则python会自动生成一个__init__(self)方法;且如果这个类有父类,此子类自动生成的__init__(self)方法会依次调用父类的__init__(self)方法,若父类中没有__init__(self)这样的方法,执行就会报错。

2. 若显式定义__init__方法,父类的__init__方法不会自动调用,需要代码显式调用。这和java不同,java会自动在构造方法的第一句加入super()语句。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
Python方法的延迟加载的示例代码
Dec 18 Python
Python语言描述连续子数组的最大和
Jan 04 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
python向图片里添加文字
Nov 26 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
一文详述 Python 中的 property 语法
Sep 01 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 Python
Pandas加速代码之避免使用for循环
May 30 Python
只用Python就可以制作的简单词云
Jun 07 Python
Python动态赋值的陷阱知识点总结
Mar 17 #Python
Python将字符串常量转化为变量方法总结
Mar 17 #Python
实例讲解Python中整数的最大值输出
Mar 17 #Python
python3+selenium自动化测试框架详解
Mar 17 #Python
Django 中间键和上下文处理器的使用
Mar 17 #Python
Python时间和字符串转换操作实例分析
Mar 16 #Python
Python中numpy模块常见用法demo实例小结
Mar 16 #Python
You might like
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
jquery 双色表格实现代码
2009/12/08 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
python的re模块使用方法详解
2019/07/26 Python
python用requests实现http请求代码实例
2019/10/31 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
演讲稿怎么写
2014/01/07 职场文书
中国好声音广告词
2014/03/18 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
五年级数学教学反思
2016/02/16 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
mysq启动失败问题及场景分析
2021/07/15 MySQL