python的继承

tech2025-08-18  8

继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。

特点:子类可以使用父类的方法,就是函数

举个简单的例子

class grandFather(): print('我是爷爷') class Parent(grandFather): print('我是父类') class SubClass(Parent): print('我是子类') sub = SubClass() #结果: 我是爷爷 # 我是父类 # 我是子类 #注意:类在定义的时候就执行类体代码,执行顺序是从上到下

深入一下super().init()含义

没有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): print('实例化时执行') test = A() #实例化类 test.fun() #调用方法 test.x #调用属性

下面是结果:

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 # 调用属性

结果如下

实例化时执行 这是属性 这是方法

siamfc++

在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类中属性。

最新回复(0)