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中zip()函数用法实例教程
Jul 31 Python
python爬虫获取百度首页内容教学
Dec 23 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
numpy linalg模块的具体使用方法
May 26 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Python Tornado核心及相关原理详解
Jun 24 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
pytorch 中nn.Dropout的使用说明
May 20 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
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
Yii学习总结之安装配置
2015/02/22 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
JavaScript中的闭包
2016/02/24 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python计算文本文件行数的方法
2015/07/06 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
pandas的resample重采样的使用
2020/04/24 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
关于运动会的广播稿
2014/09/22 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
初中数学教学随笔
2015/08/15 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书