python支持面向对象的程序设计(Python面向对象程序设计之类的定义与继承简单示例)
python支持面向对象的程序设计
Python面向对象程序设计之类的定义与继承简单示例本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/xuejianbest/article/details/85158479
- python爬百度api有次数限制吗(对python借助百度云API对评论进行观点抽取的方法详解)
- python函数基本操作(Python定义函数功能与用法实例详解)
- python指定参数教程(详解Python传入参数的几种方法)
- python操作sql server数据库(Python 数据库操作 SQLAlchemy的示例代码)
- python无法拒绝的表白代码教程(很酷的python表白工具 你喜欢我吗)
- 如何用python创建单链表(Python3实现的反转单链表算法示例)
- python线程池有几种(对python 多线程中的守护线程与join的用法详解)
- python识别验证码教程(Python3.5 + sklearn利用SVM自动识别字母验证码方法示例)
- python创建列表并查询(python列表使用实现名字管理系统)
- python批量注册(python实现批量注册网站用户的示例)
- python中tryexcept的用法(对python中的try、except、finally 执行顺序详解)
- python简易版学生管理系统(python3.6实现学生信息管理系统)
- python 爬虫招聘(Python3获取拉勾网招聘信息的方法实例)
- python常用的字符串操作方法(Python字符串的常见操作实例小结)
- python实现七个基本算法(python实现维吉尼亚算法)
- python读取文件怎么用(Python基础之文件读取的讲解)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
- ()
- ()
- 800壮士拼死拖住30万日军 八佰 的真实历史,誓与阵地共存亡(800壮士拼死拖住30万日军)
- 演员陈创,火于 哮天犬 ,颠峰于 福贵 ,现状却令人唏嘘(演员陈创火于哮天犬)
热门推荐
- dockerregistry原理(解决Docker x509 insecure registry的问题)
- SQL中的注释
- antdesignpro引入依赖如何使用(在Ant Design Pro登录功能中集成图形验证码组件的方法步骤)
- mysql中timestamp类型的CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP属性
- idea 远程部署docker(IDEA使用Docker插件菜鸟教程)
- vue pdf预览插件(Vue-pdf实现在线预览PDF文件)
- vue一个组件两种样式(Vue实现动态样式的多种方法汇总)
- 网站copyright怎么写
- sqlserver中的存盘按钮在哪(SQL Server 2016里的sys.dm_exec_input_buffer的问题)
- vue实现列表向上滚动更新(vue实现列表无缝滚动)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9