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脚本实现查找webshell的方法
Jul 31 Python
Python中atexit模块的基本使用示例
Jul 08 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Python的条件锁与事件共享详解
Sep 12 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
python实现贪吃蛇游戏源码
Mar 21 Python
python3 配置logging日志类的操作
Apr 08 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python爬虫基础之urllib的使用
Dec 31 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
jquery.validate使用攻略 第三部
2010/07/01 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
jQuery实现一个简单的轮播图
2017/02/19 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
深入浅析var,let,const的异同点
2018/08/07 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
python动态加载变量示例分享
2014/02/17 Python
Python中AND、OR的一个使用小技巧
2015/02/18 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
中学教师培训制度
2014/01/31 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
整脏治乱工作简报
2015/07/21 职场文书
学生病假条范文
2015/08/17 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript