
关于()这个函数, 他自身的构造方法就是这样设计的。这个函数类似于init那个初始化方法, 目的是来把新建出来的对象的状态给初始化了一遍。当一个对象被建立完成之后, 这个东西就会紧接着被调用。1、首先要先说明一个情况, 就是如果函数是以两个下划线开头来进行声明的话, 这就是表示将该属性设定成为了私有属性, 那么这一属性就不能在类的外部直接被使用或者被访问到。2、init函数就是初始化方法, 它是允许带着参数的类去进行初始化的工作, 同时也可以用来给这个类里面所声明的属性做点事情。3、init方法, 也就是init函数, 它的第一个参数是必须要给出来的, 这个位置必须是self, 之所以这么写是因为这是一种大家习惯用的规矩说法, 当然你也可以用其他的名字来代替它, 不过后面的那些参数你就可以按照自己的意思随便去设定了这一点方面跟我们在定义普通函数时的那些情况是完全一样的, 没有任何特别的地方或者是额外的限制。self参数含义在类的代码也就是函数里面, 需要去访问当前实例里的那些变量和函数的, 说白了就是访问实例本身的时候。对应的变量, 需要去读取之前的值, 然后要去写入新的值。去调用那个相关的函数, 也就是使用那个, 这样一来呢, 就是完成了对相应动作的执行。此处所指的这个东西, 它的本质, 说白了就是自我本身。其中, self这个概念, 它相当于咱们在使用C编程语言的时候的那个叫做self的指针, 也同时相当于是你在运用Java或者是C#这类编程语言时所使用的叫做this的参数对象。实例比如像实例化一个类class Cats:def __init__(self):self.age 2mimi Cats()mimi.age2大家观察到的现象是, 在把Cats类里面的age字段的值初始化为2以后, 在进行实例化的操作过程中, 会直接发现能够获取到age字段所对应的这个特定值。当大家弄清楚了构造方法到底是什么玩意儿以后, 我们再来聊聊另一个让人头疼的事儿, 那就是在构造方法里面被赋予的那些初始值, 其实是没有办法顺着关系传下去给继承来的子类使用的。class Dog:def __init__(self):self.hungry Truedef eat(self):if self.hungry:print wangelse:print noclass hsq(Bird):def __init__(self):self.fur whitedef play(self):print (chaijia)hh haq()hh.play() #能正常输出hh.eat() #报错因为hsq中没有hungry特性所谓原理, 具体是指这样一个情况, 就是在某个时候如果调用了一个实例的方法,那么该方法的self这个参数就会自动和这个实例绑在一块儿上, 这种情况通常被称为绑定方法。这个问题的解决方案是调用super函数, 不过需要注意的是, 这个方法仅在那些属于新式类范畴的对象里才具备实际效。class hsq(Dog):def __init__(self):super(Dog,self).__init__()self.sound Squawkdef sing(self):print self.song()