如何用super引用父类方法/变量?父类库存变量引用返回None排查
关于Python中super()的使用与父类库存引用问题解答
嘿,我来帮你搞定这两个问题:
1. 如何用super()引用父类的方法或变量(不止是函数)
首先得明确:super()的核心作用是让你在子类中便捷访问父类的类属性、实例方法,甚至类方法。分两种场景来说:
- 访问父类的实例方法:直接用
super().父类方法名(参数),最常见的就是调用父类的__init__方法来初始化继承的属性。 - 访问父类的类变量/类属性:用
super().类变量名即可,因为类变量属于整个父类,而非某个单独的实例。
举个直观的例子:
class Parent: class_var = "我是父类的类变量" def parent_method(self): print("父类的实例方法") class Child(Parent): def use_super(self): # 调用父类的实例方法 super().parent_method() # 访问父类的类变量 print(super().class_var) child = Child() child.use_super() # 输出结果: # 父类的实例方法 # 我是父类的类变量
注意:如果是父类的实例变量(比如__init__里定义的self.name),不需要用super()访问——子类实例会自动继承这些属性,直接用self.name就能拿到。
2. 解决Cars父类中BMWStock引用返回None的问题
从你给出的代码片段来看,BMWStock是Cars类的类变量,正常情况下子类通过super()或者直接Cars.BMWStock都能访问到。你说返回None,大概率是这几个原因:
- 子类中不小心定义了同名的
BMWStock变量,覆盖了父类的; - 你尝试通过实例访问时,实例自身被赋值了
BMWStock = None; BMWStock的字典语法不完整(比如你写的{"black":97,"white":85,"..."}没闭合括号)。
我给你补全代码并演示正确的访问方式:
class Cars(object): # 补全合法的BMWStock类变量(注意缩进和__init__同级) BMWStock = {"black":97,"white":85,"red":42} def __init__(self,name,brand,color): self.name=name.lower() self.brand=brand.lower() self.color=color.lower() # 定义子类示例 class MyCar(Cars): def check_bmw_inventory(self): # 方式1:用super()访问父类类变量 stock_from_super = super().BMWStock print("通过super()获取的BMW库存:", stock_from_super) # 方式2:直接通过父类名访问(类变量推荐这种更直观的写法) stock_from_parent = Cars.BMWStock print("通过父类名获取的BMW库存:", stock_from_parent) # 测试代码 my_car = MyCar("X5", "BMW", "black") my_car.check_bmw_inventory()
运行这段代码会正常输出BMW的库存字典,不会返回None。
如果你的代码还是有问题,建议检查这几点:
- 确认
BMWStock是类变量:缩进必须和__init__方法同级,不能缩进在__init__内部(不然会变成实例变量); - 检查子类或实例有没有重写
BMWStock为None; - 确保
BMWStock的字典语法正确(括号闭合、键值对格式合法)。
内容的提问来源于stack exchange,提问作者Yeo Bryan
相关产品推荐
相关产品推荐

