__init__(self),self,super,继承杂谈

Python 2.7
IDE Pycharm 5.0.3

  遇到问题,解决问题,才能不愧对自己花费的时间--小白语录

杂谈持续更新,想到哪写哪!
有点模糊的概念自己理清一下,mark一下
先来个最基础的;

class A:

    def __init__(self,name='from init',age=0):
        self.name =name
        self.age =age

    def Me1(self,name_Me1='from Me1',age_Me1=1):
        print self.name,self.age
        print name_Me1,age_Me1

a =A()#用默认
a.Me1('不用默认',2)
print '------------'
b = A('重定义',3)
b.Me1()#用默认 
from init 0
不用默认 2 ------------
重定义 3
from Me1 1

研究一下输出就可以把init和默认值,self搞的清楚了,这么个意思,教科书有点啰嗦;

进阶版,包含继承和super,默认值

__metaclass__ = type
class A:

    def __init__(self,name='from init',age=0):
        self.name =name
        self.age =age

    def Me1(self,name_Me1='from Me1',age_Me1=1):
        print self.name,self.age
        print name_Me1,age_Me1

class B(A):

    def __init__(self,name_b='默认的name_b',age_b=5):
        super(B, self).__init__(name='在B类初始化时已修改',age=4)
        self.name_b = name_b
        self.age_b = age_b

    def Me2(self,name_Me2='默认的name_Me2',age_Me2=7):
        print self.name,self.age
        print self.name_b,self.age_b
        print name_Me2,age_Me2



print '---------------'
b = B('修改默认值',6)
print '---------------'
b.Me1()
print '---------------'
b.Me1('修改Me1',2)
print '---------------'
b.Me2()
print '---------------'
b.Me2('修改Me2',8)
print '---------------'
a = A('修改A中init',10)
a.Me1()

可以自己试一下,应该输出什么呢?

--------------- ---------------
在B类初始化时已修改 4
from Me1 1 ---------------
在B类初始化时已修改 4
修改Me1 2 ---------------
在B类初始化时已修改 4
修改默认值 6
默认的name_Me2 7 ---------------
在B类初始化时已修改 4
修改默认值 6
修改Me2 8 ---------------
修改A中init 10
from Me1 1

这里挑其中的一个解释一下;
就解释b.Me1()这个吧,刚开始b被带参数的实例化,然后调用Me1方法,这个方法是在A类中的,因为B继承于A类,所以A中的方法b都可以调用,别急着往A类上找Me1方法,实例化B的过程中,先进行的是init这个构造方法,也就是初始化,那么初始化的过程中,用了super的超继承,也就说,B的init函数中,原封不动的把A的init搬过来,而且,在super中传入了默认参数,然后B的init又加了自己的self。当超类使用时候,因为在b.Me1()这个并没有传入参数,所以name_Me1这个属性值默认,不做修改,妈呀,总算解释完了,有点绕是吧,这得自己推一下。。。。。

今天就先写到这—老纸要写开题报告了窝草。

这里写图片描述

你可能感兴趣的:(继承,python,self,init,默认值)