Python 子类继承父类构造函数说明
super() 函数
super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
语法
super(type[, object-or-type])
- type – 类。
- object-or-type – 类,一般是 self。
class A:
def add(self, x):
y = x+1
print(y)
class B(A):
def add(self, x):
super().add(x)
b = B()
b.add(2) # 3
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class FooParent(object):
def __init__(self):
self.parent = 'I\'m the parent.'
print ('Parent')
def bar(self,message):
print ("%s from Parent" % message)
class FooChild(FooParent):
def __init__(self):
# super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类 FooChild 的对象转换为类 FooParent 的对象
super(FooChild,self).__init__() #不带着参数去父类的__init__
print ('Child')
def bar(self,message):
super(FooChild, self).bar(message)
print ('Child bar fuction')
print (self.parent)
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.
Python函数*args与**kwargs的用法
首先明白向python函数传递参数的方式有两种:
位置参数(positional argument)
关键词参数(keyword argument)
现在再来看*args
与**kwargs
的区别,两者都是python中的可变参数。
*args
表示任何多个无名参数,它本质是一个tuple;
**kwargs
表示关键字参数,它本质上是一个dict;
并且同时使用*args
和**kwargs
时,必须*args
参数列要在**kwargs
前。
def fun(*args,**kwargs):
print('args=', args)
print('kwargs=',kwargs)
fun(1,2,3,4,A='a',B='b',C='c',D='d')
args= (1, 2, 3, 4)
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
简述 init、new、call 方法
with as
return self
a和f是类的同一个实例