一.    引言 凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法. 二.    语法释义 1.    语法:__init__(self,*args,**kwargs) 其中: 1)    self为创建的实例,由Python自动传入. 各位看官注意: 1>关于self在此不进行详细介绍,如果需要了解请参考本博<第7.5节 揭开Python类中self的面纱>.这里self表示实例自身,从…
一. 引言 在<第8.13节 Python类中内置方法__repr__详解>老猿介绍了在命令行方式直接输入"对象"就可以调用repr内置函数或__repr__方法查看对象属性数据,实际上该过程除了调用repr内置函数或__repr__方法外,还调用了一个内置方法__getattribute__,正是通过该方法Python获取了对象的信息进行输出. 二. __getattribute__语法释义 __getattribute__方法是一个实例方法,object基类中定义了该方…
第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类没有重写构造方法,Python将会给出默认的__init__方法.上述介绍适用于自定义类没有自定义父类的情况,如果自定义类是从其他自定义类派生的,又会怎样呢? 二.    构造方法与继承 为了保障相关逻辑的正确性,在子类重写构造方法时,必须调用超类(继承的类)的构造方法,否则可能无法正确地初始化对象…
第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一.    静态方法定义 1.    语法 @ staticmethod  def 方法名(参数): 方法体 2.    定义说明: 1)    上述语法定义中,@ staticmethod 称为静态方法装饰器,凡是静态方法定义都必须有该装饰器. 2)    静态方法与实例方法和类方法不同的是,没有类…
第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体中定义,所有在类中定义的方法默认是实例方法.定义实例方法与定义函数基本相同,只是Python要求实例方法的第一个形参必须为self,也就是实例对象本身,因此实例方法至少应该有一个self参数.关于self的说明,请大家参考老猿前面的章节<第7.5节 揭开Python类中self的面纱>.如下例子:…
上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述代码中__new__方法调用父类的__new__方法时,传递参数只传递了cls一个实参,而没有传递后面两类参数(在本例中只有第一类参数中有1个实参10).这个问题也困扰了老猿,我们先验证一下,如果传递全部参数会怎样. 一. 案例1:调用object类的__new__传参验证 我们将上节的类中的__new__方…
上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = 值 语法释义: "对象名"为要增加实例变量的对象,如果是在实例方法中,应该为"self". 属性名为要定义实例变量的名字,必须是字符串类型,即变量名必须用引号. 上述语法相当于: 对象.属性 = 值. 这是由于Python中所有变量都存在对应名字空间的字典中,定义变量就…
一. 引言 前面章节介绍了类中的构造方法和__new__方法,并分析了二者执行的先后顺序关系.__new__方法在__init__方法前执行,__new__方法执行后才返回实例对象,也就是说__new__方法执行前实例并未创建,构造方法中的参数self是__new__方法执行后传递过去的实例.那如果__new__方法未返回实例对象会怎样呢? 二. 案例说明 本节老猿准备验证两种情况: 1. 重写的__new__方法不返回实例会怎样? 2. 重写实例调用父类的__new__方法时,cls如果不传实…
上节介绍了__new__()方法这个比构造方法还重要的方法的语法,本节通过案例来详细剖析__new__()方法的细节以及它与构造方法之间的关系. 一.    案例说明 本节以圆Cir类为例来说明,为了说明问题只定义基本的类信息,只包含一个成员半径radius,两个方法,就是__new__()方法和构造方法__init__()方法. 为了方便查看信息,我们将相关参数及返回值的信息输出. 二.    案例代码 1.    类定义 class Cir():    def __new__(cls,*ar…
一.    引言 在本博前面的内容都对构造方法__init__进行了介绍,也在前面章节引入了__new__方法,但老猿认为__new__方法比构造方法__init__更应该属于构造方法.这是因为在Python中,__new__方法是在实例对象创建时执行的,而构造方法__init__是实例创建后执行的. 二.    __new__方法介绍 __new__方法是Python新式类引入的,__new__通常用于控制生成一个新实例的过程.它是类级别的静态方法,是在创建实例对象前执行,如果自定义类中没有重…