当使用Python类时,可以使用构造函数和析构函数来初始化和清理类实例。构造函数在创建类实例时自动调用,而析构函数在删除类实例时自动调用。
__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。一般用来对实例的属性进行初使化,如果不提供,Python 会给出默认的__init__方法。
在《【Python】Windows版本的Python开发环境的配置,Helloworld,Python中文问题,输入输出、条件、循环、数组、类》(点击打开链接)虽然一定程度上介绍了Python中类的用法,然而并没有涉及到类中最重要的两个东西,一个是构造函数,另一个是析构函数。
@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的
使用del语句删除实例,引用计数减1,当引用技术为0时,会自动调用【__del__】方法
class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
构造函数是一种特殊的类成员方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。Python 中的类构造函数用 __init__ 命名,为 MyClass 添加构造函数方法,并实例化一个对象。
之前我们讨论过 _ _init_ _()方法,说它相当于其它面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。
Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的类的析构方法。
Python 虽然简单易学,但要真正掌握和精通也不是件容易的事情,比如本文将要分享的这些有趣的特性,如果你一眼就看穿了问题的本质,说明你已经非常精通了。如果没有那就多看几次,细节见真知,敲敲代码验证下,对于提升 Python 编程技能,非常有效。
在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法、操作符重载和对象生命周期。
在Python中,类特殊成员是指以双下划线开头和结尾的属性和方法,也被称为魔术方法(Magic methods)或特殊方法(Special methods)。这些特殊成员在类的定义中具有特殊的语法和功能,用于实现对象的特定行为和操作。
当对象在某个作用域中调用完毕,在跳出其作用域的同时析构方法会自动被调用,这样可以释放内存空间
👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴。析构函数(destructor) 与构造函数相反
Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。 .1 __init__ 类似于构造函数 #!/usr/local/bin/python class Study: def __init__(self,name=None): self.name = name def say(self): print self.name study = Study("Badboy") study.say() .2 __del__ 类似于析构函数 #!/usr/local/bin/python class Study: def __init__(self,name=None): self.name = name def __del__(self): print "Iamaway,baby!" def say(self): print self.name study = Study("zhuzhengjun") study.say() .3__repr__ 使用repr(obj)的时候,会自动调用__repr__函数,该函数返回对象字符串表达式, 用于重建对象,如果eval(repr(obj))会得到一个对象的拷贝。 #!/usr/local/bin/python class Study: def __init__(self,name=None): self.name = name def __del__(self): print "Iamaway,baby!" def say(self): print self.name def __repr__(self): return "Study('jacky')" study = Study("zhuzhengjun") study.say() print type(repr(Study("zhuzhengjun"))) # str print type(eval(repr(Study("zhuzhengjun")))) # instance study = eval(repr(Study("zhuzhengjun"))) study.say() .4__str__ Python能用print语句输出内建数据类型。有时,程序员希望定义一个类,要求它的对象也能用print语句输出。Python类可定义特殊方法__str__,为类的对象提供一个不正式的字符串表示。如果类的客户程序包含以下语句: print objectOfClass 那么Python会调用对象的__str__方法,并输出那个方法所返回的字符串。 #!/usr/local/bin/python class PhoneNumber: def __init__(self,number): self.areaCode=number[1:4] self.exchange=number[6:9] self.line=number[10:14] def __str__(self): return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line) def test(): newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n") phone=PhoneNumber(newNumber) print "The phone number is:" print phone if__name__=="__main__": test() 方法__init__接收一个形如"(xxx) xxx-xxxx"的字符串。字符串中的每个x都是电话号码的一个位数。方法对字符串进行分解
Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。 .1 __init__ 类似于构造函数 #!/usr/local/bin/python class Study: def __init__(self,name=None): self.name = name def say(self): print self.name study = Study("Badboy") study.say() .2 __del__ 类似于析构函数 #!/usr/local/bin/python class Study: def __init__(self,name=None): self.name = name def __del__(self): print "Iamaway,baby!" def say(self): print self.name study = Study("zhuzhengjun") study.say() .3__repr__ 使用repr(obj)的时候,会自动调用__repr__函数,该函数返回对象字符串表达式, 用于重建对象,如果eval(repr(obj))会得到一个对象的拷贝。 #!/usr/local/bin/python class Study: def __init__(self,name=None): self.name = name def __del__(self): print "Iamaway,baby!" def say(self): print self.name def __repr__(self): return "Study('jacky')" study = Study("zhuzhengjun") study.say() print type(repr(Study("zhuzhengjun"))) # str print type(eval(repr(Study("zhuzhengjun")))) # instance study = eval(repr(Study("zhuzhengjun"))) study.say() .4__str__ Python能用print语句输出内建数据类型。有时,程序员希望定义一个类,要求它的对象也能用print语句输出。Python类可定义特殊方法__str__,为类的对象提供一个不正式的字符串表示。如果类的客户程序包含以下语句: print objectOfClass 那么Python会调用对象的__str__方法,并输出那个方法所返回的字符串。 #!/usr/local/bin/python class PhoneNumber: def __init__(self,number): self.areaCode=number[1:4] self.exchange=number[6:9] self.line=number[10:14] def __str__(self): return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line) def test(): newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n") phone=PhoneNumber(newNumber) print "The phone number is:" print phone if__name__=="__main__": test() 方法__init__接收一个形如"(xxx) xxx-xxxx"的字符串。字符串中的每个x都是电话号码的一个位数。方法对字符串进行分解,并将电话号码的不同部分作为属性存储。 方法__str__是一个特殊方法,它构造并返回PhoneNumber类的一个对象的字符串表示。解析器一
很明显,在普通的非函数参数list中只需要使用 del lst_new[] 或者 list_new = [] 就可以清空列表。
@property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。 1》只有@property表示只读。 2》同时有@property和@x.setter表示可读可写。
1,当我们的实例对象需要有明确的初始化步骤的时候,你可以在 __init__ 方法中部署初始化的代码。
这与Cpython 编译优化相关,行为称为字符串驻留,但驻留的字符串中只包含字母,数字或下划线。
Python 中有大量类似__init__这种以双下划线开头和结尾的特殊成员及“魔法方法”, 它们有着非常重要的地位和作用,也是 Python 语言独具特色的语法之一! 比如:
仅用学习参考 面向对象封装案例 目标 封装 编写类 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类
在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类
这是咱们想得到的,根据魔法方法__init__的要求,返回值一定要是None大家记住就好。
既要保护类的封装特性,又要让开发者可以使用 对象.属性 的方式操作方法,@property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对 () 小括号。
一、类与对象 例1 class Employee: 'Base class of employee' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def showInfo(self): print "Name : ", self.name, ", Salary :
运算符重载,是对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型。运算符重载,是为了让用户自定义的对象能够使用中缀运算符(如+,-,*,&等)或一元运算符(如~)等。
在python中,当使用类名()创建对象时,为对象分配完空间后,自动调用__init__方法,当一个对象被从内存中销毁前,会自动调用__del__方法。(__del__英文状态下的del左右一边各两个下划线)
Python 类在定义时可以在小括号中指定基类,所有 Python 类都是 object 类型的子类。
原本每个的标题都是原版中的英文,有些取名比较奇怪,不直观,我换成了可以描述主题的中文形式,有些是自己想的,不足之处请指正。另外一些 Python 中的彩蛋被我去掉了。
内部的状态转化,导致了行为表现形式不同。 所以,用户在外面看起来,好像是修改了行为。
注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。
仅供学习,转载请注明出处 魔法属性 无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下: 魔法属性 __doc__ 表示类的描述信息 In [24]: class FatBoss: ...: """描述信息:我就是超级胖子老板,问你怕不怕""" ...: def func(self): ...: pass ...:
正是由于内部状态的变化,导致对外的行为发生了变化。例如:相同的方法在不同时刻被调用,行为可能会有差异。
提示 __方法名__ 格式的方法是 Python 提供的 内置方法 / 属性,稍后会给大家介绍一些常用的 内置方法 / 属性
最近一直在用Python写代码,发现了很多代码重复的问题,总是复制粘贴显得特别凌乱,于是就想用类来封装一下。下面就记录下Python中最基础的面向对象编程方法。python的面向对象跟java,c++的面向对象意思都差不多,从他们类比过来还是非常好理解的。
最近在熟悉Python的class类的时候,无意中发现同样的代码,在pycharm和IDLE中结果不同,闲话少说先上代码:
Python是一个面向对象的语言,但是因为python语言的特性,我们大多的python程序员只是把它当做一个工具,在我们项目的实际使用中除了使用Django框架以外,其他的都是使用python最基础的方式,完全跟pythonic没有一点关系,当然主要还是因为我们能力太差。面向对象是书写各种框架的基础,python的面向对象不仅拥有通用面向对象的特性,而且还拥有一些极其强大的特性,可以让我们把它的便利性发挥到极致。本篇将详细介绍Python 类的成员、成员修饰符、类的特殊成员。
·cookedLevel :这是数字;0~3表示还是生的,超过3表示半生不熟,超过5表示已经烤好了,超过8表示已经烤成木炭了!我们的地瓜开始时时生的
下面的一个小demo,定义了一个省份类 Province ,即类对象 Province ,开辟了一块内存空间,空间中存放着 类属性 country 和 __init__()方法 。
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。
在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法"。比如我们接触最多的__init__.
【新智元导读】Python神奇方法是指一些允许在自定义类中增加“神奇”功能的方法。而在Python官方文档中,有关这些方法的介绍或描述不仅内容分散,而且组织结构也相对松散。本文便对Python神奇方法做了系统的梳理。对于初学者亦或Python行家,都或多或少的会有些帮助。
面向对象编程 —— Object Oriented Programming 简写 OOP
Python 里有一种方法,叫做魔法方法。Python 的类里提供的,两个下划线开始,两个下划线结束的方法,就是魔法方法,魔法方法在恰当的时候就会被激活,自动执行。
在做 Python 开发时,我们经常会遇到以双下划线开头和结尾的方法,例如 __init__、__new__、__getattr__、__setitem__ 等等,这些方法我们通常称之为「魔法方法」,而使用这些「魔法方法」,我们可以非常方便地给类添加特殊的功能。
在Python中,__init__和__del__是类的两个特殊方法,它们分别在对象实例化和销毁时调用。本文将介绍这两个方法的定义、用途和如何使用它们。
Python3中应当总是使用UTF-8。(Python2使用ASCII。)在使用了规定编码后不需要再声明文件编码。
原文:https://www.cnblogs.com/dotnetcrazy/p/9202988.html
领取专属 10元无门槛券
手把手带您无忧上云