一、什么叫类?
类是具有相同属性的对象的集合。
[Reference1]https://www.cnblogs.com/hexige/p/7239695.html
二、类和对象有什么区别?
类是抽象的,对象是类实例化后的实体。
[Reference2]https://blog.csdn.net/qq_28284093/article/details/80092544
三、_init_函数是干什么用的?
_init_函数是用来初始化对象的函数。它的第一个参数必须是 self。
注意:类中def定义的函数,第一个参数必须是 self。
四、self在类中有什么含义?
实例。
https://blog.csdn.net/LY_ysys629/article/details/54893185
五、子类调用父类的初始化方法
python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的init方法重写了父类的init方法,如果在子类中这些属性未经过初始化,使用时就会出错。例如以下的代码:
class A(object):
def __init__(self):
self.a = 5
def function_a(self):
print('I am from A, my value is %d' % self.a)
class B(A):
def __init__(self):
self.b = 10
def function_b(self):
print('I am from B, my value is %d' % self.b)
self.function_a() # 调用类A的方法,出错
if __name__ == '__main__':
b = B()
b.function_b()
这时候就需要在类B的init方法中先执行类A的init方法,脚本才可以正确执行。Python提供了两种方法来完成这个任务。
方法一:调用未绑定的父类init方法
- 在类的方法定义时,首个参数均为self。当实例化这个类时,self就被自动绑定到当前的实例。绑定也就意味着这个实例的属性,方法都可以通过‘self.***的方式进行调用。但是如果通过类名直接调用类的方法,self参数就不会被自动绑定到实例上,可以绑定到我们指定的实例上。也就是子类的实例上,在这里就是类B了。
- 所以这里所说的未绑定的父类init方法 就是指未绑定父类实例的父类init方法。
class A(object):
def __init__(self):
self.a = 5
def function_a(self):
print('I am from A, my value is %d' % self.a)
class B(A):
def __init__(self):
A.__init__(self) # 此处修改了。如果类A的__init__方法需要传参,也需要传入对应的参数
self.b = 10
def function_b(self):
print('I am from B, my value is %d' % self.b)
self.function_a()
if __name__ == '__main__':
b = B()
b.function_b()
方法二:调用super函数
super函数是用于调用父类的一个方法,主要是用于解决多继承问题,避免多继承带来的一些问题,当然也可以用来解决单继承问题,调用父类的init方法了。
class A(object):
def __init__(self):
self.a = 5
def function_a(self):
print('I am from A, my value is %d' % self.a)
class B(A):
def __init__(self):
super(B, self).__init__() # 此处修改了
self.b = 10
def function_b(self):
print('I am from B, my value is %d' % self.b)
self.function_a()
if __name__ == '__main__':
b = B()
b.function_b()
总结
两种方法各有优缺点,但都可以解决问题。
- 方法一简单直观,但面对多继承问题,只能多次调用每个父类的init方法
- 方法二不太直观,但可以解决多继承问题,会一次性的执行所有的父类的对应方法
所以实际使用时,按照自己的需要选择一个就行了。
本文来自 feishicheng 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/feishicheng/article/details/79596000?utm_source=copy
网友评论