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中wx将图标显示在右下角的脚本代码
Mar 08 Python
Python发送Email方法实例
Aug 21 Python
python中函数默认值使用注意点详解
Jun 01 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
Pandas之排序函数sort_values()的实现
Jul 09 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
python网络编程之五子棋游戏
May 14 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 Python
Python 高效编程技巧分享
Sep 10 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
浅谈HTML5 & CSS3的新交互特性
2016/07/19 HTML / CSS
国际书籍零售商:Wordery
2017/11/01 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
会计毕业生自我鉴定
2013/11/04 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
2015年科普工作总结
2015/07/23 职场文书
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫
Python实现聚类K-means算法详解
2022/07/15 Python