*arg和**kwarg用法
*args:可以理解为只有一列的表格,长度不固定
**kwargs:可以理解为字典,长度也不固定
参考:Python初学者笔记(五):白话讲*arg和**kwarg,你看不懂算我笨!
super().__init__()
继承父类
Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx
代替 super(Class, self).xxx
参考:Python super() 函数
可以调用外部类和函数作为参数传入,并且在子类的时候可以参数不赋值,可以父类再给类和函数赋参数
例如,下面的get_address
函数和Job
类在FooChild
中参数不赋值也没关系,只要在FooParent
中赋值即可,即self.address = get_address('China')
和self.job = Job('Shenzhen', 'Tencent')
class Job:
def __init__(self, job_address, job_name):
self.job_address = job_address
self.job_name = job_name
def get_address(address):
return address
class FooParent(object):
def __init__(self, address=get_address, job=Job):
self.parent = 'I\'m the parent.'
print('Parent')
self.address = get_address('China')
self.job = Job('Shenzhen', 'Tencent')
class FooChild(FooParent):
def __init__(self):
# super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类 FooChild 的对象转换为类 FooParent 的对象
super(FooChild, self).__init__(address=get_address, job=Job)
print('Child')
if __name__ == '__main__':
fooChild = FooChild()
print(fooChild.address)
print(fooChild.job.job_address)
print(fooChild.job.job_name)
输出为
Parent
Child
China
Shenzhen
Tencent
传递参数时*号的用途
*号加在形参前代表的是收集参数
*号加在实参前代表的是将输入迭代器拆成一个个元素
参考:Pytorch 容器