Python面向对象程序设计构造函数和析构函数用法分析
作者:微信1257309054 发布时间:2021-12-12 07:01:48
本文实例讲述了Python面向对象程序设计构造函数和析构函数用法。分享给大家供大家参考,具体如下:
构造函数和析构函数
1、构造方法的使用
很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为init()
的特殊方法(构造方法)来实例化一个对象。
构造方法也叫做构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法。
演示1:构造方法被调用的契机
class Person():
#构造方法
def __init__(self):
print("构造函数被执行了")
#创建对象的过程中构造函数被自动调用
p1 = Person()
输出:
构造函数被执行了
结论:创建对象的过程中调用了构造函数。
当未手动添加构造函数时,系统会默认提供一个无参的构造函数。
演示2:构造函数和普通函数之间的区别
说明:构造函数本质上还是一个函数,函数可以有参数,也可以无参,所以同样的道理,构造函数也是如此。
class Person():
#一般情况下,构造方法的参数和成员变量有关,并且在设置的过程中与成员变量同名
def __init__(self, name, age, height, weight):
#print(nname, age, height, weight)
#因为构造方法是创建对象的过程中被调用的
#所以构造方法的作用一般是用来定义成员变量并且给成员变量赋值
#定义属性并给属性赋值
#通过self来进行区分是成员变量还是形参
self.name = name
self.age = age
self.height = height
self.weight = weight
def run(self):
print("run")
def eat(self, food):
print("eat "+ food)
'''
构造函数: __init__() 在使用类创建对象的时候自动调用
注意: 如果不显式的写出构造函数,默认会自动添加一个空的构造函数,函数体中什么都不实现
'''
per = Person("hanmeimei", 20, 170, 55)
print(per.name, per.age)
per.run()
per2 = Person("lili", 21, 175, 70)
print(per2.name, per2.age)
输出:
hanmeimei 20
run
lilei 21
2、self的使用
注意:self代表类的实例[对象],而非类本身。
类的方法与普通的函数只有一个特殊的区别—>他们必须有一个额外的第一个参数名称,按照惯例它的名字是self。
self.__class__:返回的是当前类的类名
class Test():
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
输出:
<__main__.Test object at 0x0000017D47D81B00>
<class '__main__.Test'>
演示2:self不是python的关键字
class Person():
def run(self):
print("run")
print(self.__class__)
p = self.__class__("tt", 30, 10, 30)
def eat(self,food):
print("eat" + food)
def say(self):
print("hello, my name is %s, I am %d year old" % (self.name, self.age))
def play(a):
print("play", a.name)
def __init__(self, name, age, height, weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
# self代表此时正在创建对象,self.属性表示当前对象的属性
per1 = Person("tom", 20, 160, 80)
per1.say()
per2 = Person("henmeimei", 21, 160, 80)
per2.say()
per1.say()
per1.run()
输出:
hello, my name is tom, I am 20 year old
hello, my name is henmeimei, I am 21 year old
hello, my name is tom, I am 20 year old
run
<class '__main__.Person'>
3、析构函数的使用
析构函数调用的契机【对象被销毁的时候】:
1、程序执行结束,会自动调用析构函数
2、使用del 删除对象的时候,系统会自动调用析构函数
注意:如果没写析构函数,当符合析构函数调用的契机时,系统会自动调用父类的析构函数。
演示:
class Person():
def run(self):
print("run")
def eat(self, food):
print("eat "+food)
def __init__(self, name, age, height, weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
def __del__(self):
print("析构函数被调用了")
per = Person("hanmeimei", 20, 170, 55)
#释放对象
del per
#注意:对象释放后就不能再进行访问了
#在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费
#其实就是作用域的问题
def func():
per2 = Person("aa", 1, 1, 1)
func()
输出:
析构函数被调用了
析构函数被调用了
class Animal(object):
def __del__(self):
print('Animal父类的析构函数被调用了')
class Cat(Animal):
pass
cat = Cat()
输出:
Animal父类的析构函数被调用了
class A():
def __init__(self):
print("父类A构造函数被调用了")
def __del__(self):
print("父类A析构函数被调用了")
class B(A):
def __init__(self):
print("子类B构造函数被调用了")
A.__init__(self)
def __del__(self):
print("子类B析构函数被调用了")
class C(A):
pass
def main():
b = B()
del b
print("*********************")
c = C()
if __name__ == '__main__':
main()
输出:
子类B构造函数被调用了
父类A构造函数被调用了
子类B析构函数被调用了
*********************
父类A构造函数被调用了
父类A析构函数被调用了
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/lm_is_dc/article/details/80166544


猜你喜欢
- 1.什么是装饰器?要理解什么是装饰器,您首先需要熟悉Python处理函数的方式。从它的观点来看,函数和对象没有什么不同。它们有属性,可以重新
- 服务:# chkconfig --list 列出所有系统
- windows下mysql双向同步备份实现方法以下的文章主要讲述的是在windows环境下实现MySQL数据库的主从同步备份的正确操作方案,
- OAuth2 的概念OAuth是一个关于授权的开放网络标准,OAuth2是其2.0版本。它规定了四种操作流程(授权模式)来确保安全应用场景有
- 首先是准备工作Python 2.7.11:下载pythonPycharm:下载Pycharm其中python2和python3目前同步发行,
- Sql Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中
- Pycharm的下方工具栏中有两个窗口:Python Console和Terminal(如下图)其中,Python Console叫做Pyt
- 这篇博客主要是为了学习Python和PyQt,因为对棋类游戏比较热衷,所以从规则较简单的五子棋入手,利用PyQt5实现图形界面,做一个可以进
- tips:如果根目录下有favicon.ico,可省去<link rel="shortcut icon" ...&
- 如下所示:# 计算一个字符串中所有数字的和def numsum(s):sum = 0
- 导言:到目前为止,我们的教程围绕的是text数据。然而,很多应用程序既需要处理text数据,也需要处理二进制数据。比如招聘网站可能需要用户上
- 本文实例为大家分享了python3实现人脸识别的具体代码,供大家参考,具体内容如下第一种:import cv2import numpy as
- 学习神经网络已经有一段时间,从普通的BP神经网络到LSTM长短期记忆网络都有一定的了解,但是从未系统的把整个神经网络的结构记录下来,我相信这
- wxPython是Python语言的一套优秀的GUI图形库。允许Python程序员很方便的创建完整的、功能键全的GUI用户界面。wxPyth
- 在目前的工作中需要解决复制整个SqlServer数据库的问题,复制的内容包括数据库大纲、数据库中的存储过程、函数、表结构、主外键关系以及表中
- 1.__new__(cls, *args, **kwargs) 创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是
- 问题描述有时在遇到一个文本需要统计文本内词汇的次数 的时候 ,可以用一个简单的python程序来实现。解决方案首先需要的是一个文本文件(.t
- 本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:Python版本: python3.+ 运
- 适配器模式适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作。适配器可担任两个对象间的封装器, 它会接收对于一个对象的调用, 并将
- 如下所示:self.findChild(QComboBox, "name") self is classfirst pa