关于python的几点疑惑验证:

1.python中父类构造函数和子类构造数据的调用

1)当父类有构造函数,子类不重写__init__时,子类实例化的时候,会自动调用父类的构造函数:

class father(object):

    def __init__(self):
        print("我是父类的构造函数")


class son(father):

    def son_method(self):
        print("我是子类的实例方法")


s=son()

运行结果:我是父类的构造函数

2)当父类有构造函数,子类重写__init__时,子类实例化的时候,只会调用子类自己的init函数不会调用父类的构造函数:

class father(object):

    def __init__(self):
        print("我是父类的构造函数")


class son(father):

    def __init__(self):
        print("我是子类的构造函数")

    def son_method(self):
        print("我是子类的实例方法")

s=son()

运行结果:我是子类的构造函数

3)当父类有构造函数,子类显示调用父类构造函数__init__时,子类实例化的时候,只会调用子类自己和父类的构造函数init:

class father(object):

    def __init__(self):
        print("我是父类的构造函数")


class son(father):

    def __init__(self):
        super(son,self).__init__()
        print("我是子类的构造函数")

    def son_method(self):
        print("我是子类的实例方法")

s=son()

运行结果:我是父类的构造函数
                  我是子类的构造函数

2.类中类方法和实例方法调用的区别:

class Testclass(object):

    @classmethod
    def classmethodtest(cls):
        print("我是类方法")

    def instancemethodtest(self):
        print("我是实例方法")


Testclass.classmethodtest()      #我是类方法
Testclass().instancemethodtest()    #我是实例方法
Testclass.instancemethodtest()     #报错:TypeError: instancemethodtest() missing 1 required positional argument: 'self'

为什么 Testclass.instancemethodtest()会报错呢? 1.因为self代表实例本身,Testclass()就代表把类实例化,并且实例方法第一个参数是self,所以实例方法应该使用Testclass().实例方法调用;2.cls代表类本身,所以调用类方法的时候可以直接类名.类方法

3.通过类创建实例(对象)的时候肯定会调用构造函数;那么通过类调用类方法和通过实例调用类方法呢?

通过类名.类方法的方式调用类方法是不会调用类中的构造函数的;类名().类方法的方式调用类方法是会调用类中的构造函数的:

class Testclass(object):

    @classmethod
    def classmethodtest(cls):
        print('我是类方法')

    def __init__(self):
        print('我是init构造方法')


    def instancemethodtest(self):
        classvar=5
        print("我是实例方法")
        print(classvar)

Testclass.classmethodtest()
print("--------我是分隔线------------")
Testclass().classmethodtest()

运行结果:

我是类方法
--------我是分隔线------------
我是init
我是类方法