继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。
特点:子类可以使用父类的方法,就是函数
下面是结果:
Traceback (most recent call last): 实例化时执行 这是方法 File "/hom/PycharmProjects/untitled/super.py", line 17, in <module> test.x # 调用属性 AttributeError: 'A' object has no attribute 'x' 加入super(A, self).init()时调用A的父类Root的属性和方法(方法里对Root数据进行二次操作) class Root(object): def __init__(self): self.x = '这是属性' def fun(self): print(self.x) print('这是方法') class A(Root): def __init__(self): super(A,self).__init__() print('实例化时执行') test = A() # 实例化类 test.fun() # 调用方法 test.x # 调用属性结果如下
实例化时执行 这是属性 这是方法在videoanalyst/data/sampler/sampler_impl/track_pair_sampler.py中出现
class TrackPairSampler(SamplerBase): def __init__(self, datasets: List[DatasetBase] = [], seed: int = 0, data_filter=None) -> None: super().__init__(datasets, seed=seed)理解这个super().__init__需要回到SamplerBase类中的__init__() 在videoanalyst/data/sampler/sampler_base.py
class SamplerBase: def __init__(self, datasets: List[DatasetBase] = [], seed: int = 0) -> None: self._hyper_params = self.default_hyper_params self._state = dict() self._state["rng"] = np.random.RandomState(seed) self.datasets = datasets for d in datasets: dataset_name = type(d).__name__ logger.info("Sampler's underlying datasets: {}, length {}".format( dataset_name, len(d)))可以看到super().__init__(datasets, seed=seed)中的dataset是传递到SamplerBase类中做初始化,这样就可以继承SamplerBase类中属性。