Python 如何更改子类中的类属性,并在父类中定义的方法中使用它?
我似乎找不到一组搜索关键字来回答这个问题。我想创建一个父类,其中定义了使用class属性的方法。子类将定义该子类的class属性的值,在调用父类中定义的方法时使用它。我该怎么做 [编辑:我为什么要这样做?请注意,是的,我可以创建一个实例属性,以实现如下所示的行为目标。但我想使用类属性来执行此操作,因为下面的代码只是一个玩具示例。在我的生产代码中,我将创建数千个子类实例属性本身是一个大的数据数组。据我所知,如果我使用实例类,这将是一个巨大的内存浪费。] 例如,我想要这样的东西:Python 如何更改子类中的类属性,并在父类中定义的方法中使用它?,python,inheritance,attributes,Python,Inheritance,Attributes,我似乎找不到一组搜索关键字来回答这个问题。我想创建一个父类,其中定义了使用class属性的方法。子类将定义该子类的class属性的值,在调用父类中定义的方法时使用它。我该怎么做 [编辑:我为什么要这样做?请注意,是的,我可以创建一个实例属性,以实现如下所示的行为目标。但我想使用类属性来执行此操作,因为下面的代码只是一个玩具示例。在我的生产代码中,我将创建数千个子类实例属性本身是一个大的数据数组。据我所知,如果我使用实例类,这将是一个巨大的内存浪费。] 例如,我想要这样的东西: 类父级: 乘数=无
类父级:
乘数=无
def使用(自我,x):
返回Parent.multiplier*x
班童(家长):
乘数=2
班级女生(家长):
乘数=3
男孩
打印(男孩,使用它(10))
女孩
打印(女孩,使用它(10))
这将产生以下输出:
20
30
回溯:
TypeError Traceback (most recent call last)
~/scratch/test.py in <module>
13
14 boy = Boy()
---> 15 print(boy.use_it(10))
16
17 girl = Girl()
~/scratch/test.py in use_it(self, x)
2 multiplier = None
3 def use_it(self, x):
----> 4 return Parent.multiplier * x
5
6 class Boy(Parent):
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
输出:
30
30
好的,那么你犯了一些错误。我想说的是,你对这个问题的第一次修订更接近有效。这就是你想要的:
类父级:
def使用(自我,x):
返回self.乘数*x
班童(家长):
乘数=2
班级女生(家长):
乘数=3
男孩
打印(男孩,使用它(10))
女孩
打印(女孩,使用它(10))
输出
20
30
请注意,您不需要为
父类定义乘数
,因为您希望每个派生类自己定义一个。请使用完整的错误回溯更新您的问题。您显示的代码完全符合您的要求。您只需将缺少的self
参数添加到使用它
并访问multiplier
作为self.multiplier
。在提问之前您是否尝试过您的代码?我已经对我的问题进行了扩展,修复了一些类型,添加了回溯,并解释了为什么我要做我试图做的事情。肯普,我并不懒惰。我尝试过代码的许多变体。我不小心遗漏了self
ause\it()
玩具示例中的rgument(并在原始帖子中进行了更正)。但是将multiplier
更改为self.multiplier
并不是解决方案,因为这会创建一个实例属性,而不是类属性(实际上,它会创建一个错误,因为它不包含在\uuu init\uu()
方法中).好的,所以使用self.multiplier
是一种方法(参见我的答案)。它不会创建实例属性,除非您对其进行写入。啊哈。很好。谢谢,quamrana和Kemp!