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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
Python with用法:自动关闭文件进程
Jul 10 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
Django使用rest_framework写出API
May 21 Python
pycharm sciview的图片另存为操作
Jun 01 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 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实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
PHP实现变色验证码实例
2014/01/06 PHP
js获取select标签选中值的两种方式
2014/01/09 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
用js编写留言板
2020/03/17 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
Python实现读取并保存文件的类
2017/05/11 Python
python 生成图形验证码的方法示例
2018/11/11 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Python调用JavaScript代码的方法
2020/10/27 Python
python 基于opencv实现图像增强
2020/12/23 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
四年的个人工作自我评价
2013/12/10 职场文书
销售顾问工作计划书
2014/09/15 职场文书
公民代理授权委托书
2014/09/24 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL