Python面向对象程序设计之类的定义与继承简单示例
作者:xuejianbest 发布时间:2022-03-24 03:00:16
本文实例讲述了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


猜你喜欢
- 有时候,我们可能想在django中写一些代码来测试某些功能,我们希望在django项目中单独运行某个python文件来做这项测试工作。但是如
- 一、复制的原理MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。每个从服务器从主服务器接收主服务器已经记录
- 一、验证计算机服务列表中是否有MySQL服务(1)右击桌面上的计算机图标出现菜单列表选项,选中管理(有多种方式可以打开计算机本地服务列表,这
- Python Pandas聚合函数在前一节,我们重点介绍了窗口函数。我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和
- 前言在学习任何一个后端技术,如果不让数据库参与进来,那只能说在学习过程中都不算完整的。以前用的是5.7版本的MySQL,在学习实践Sprin
- 本文实例主要实现Python中的文件复制操作,有两种方法,具体实现代码如下所示:#coding:utf-8 # 方法1:使用read()和w
- 前几天,杨超越编程大赛火了,大家都在报名参加,而我也是其中的一员。在我们的项目中,我负责的是数据爬取这块,我主要是把对于杨超越 的
- 一、软件下载MySQL下载安装:官网下载地址:https://www.mysql.com/或者本地下载二、安装须知如果是安装过该软件的卸载重
- python加密打包程序加密方式:将py文件转为pyd格式安装easycython模块 pip install easycython使用ea
- 目录机器人api接口调用接口封装机器人实现两个机器人聊天聊天文字转语音总结众所周知,现在网上有很多非常智能bushi(智障)的AI机器人接口
- 基本思路:首先用开发者工具找到需要提取数据的标签列利用xpath定位需要提取数据的列表然后再逐个提取相应的数据:保存数据到csv:利用开发者
- 这一段CSS代码相当简单,目的就是想用CSS来控制某段文字的显示与隐藏。起初我采用了下面的代码,令人不可思议的是,它们在我的IE6.0上居然
- 本文实例讲述了python开发之文件操作用法。分享给大家供大家参考,具体如下:先来看看官方API:os-Miscellaneous oper
- 设计首页的第一步是设计版面布局。就象传统的报刊杂志编辑一样,我们将网页看作一张报纸,一本杂志来进行排版布局。虽然 * 页技术的发展使得我们开
- 本文实例讲述了Python写入CSV文件的方法。分享给大家供大家参考。具体如下:# _*_ coding:utf-8 _*_#xiaohei
- 当我们进行数据分析时,有时候需要对数值型数据进行离散化,将其划分为不同的标签或类别。这样做可以方便我们进行统计和分析,并帮助我们更好地理解数
- 一个假冒的序列号被用来注册Internet Download Manager。IDM正在退出...解决办法1.找到文件 C:\W
- 一、常见模型分类1.1、循环服务器模型循环接收客户端请求,处理请求。同一时刻只能处理一个请求,处理完毕后再处理下一个。优点:实现简单,占用资
- 1、将python程序打包成单文件(使用 -F 参数)后,尝试运行外部文件却提示找不到的问题当你将python程序打包成单文件(使用 -F
- 1、安装coveragepip install coverage安装完成后,会在Python环境下的\Scripts下看到coverage.