关于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
我是类方法