我是Python的新手,并试图了解执行以下操作的最正确方法:
我有一个名为" Sample"的基类。它有一些属性,如dp,tp等。
我还有几个从这个基础派生的子类,如SampleA,SampleB等。它们有几个不同的属性。使用这些独特属性计算其中一个属性。这个计算非常重复,因此我想编写一个方法并在每个类中调用它来计算参数的值。
class Sample(object):
tp = 4
dp = 4.2
por = 0.007
def common_method(self, arg1, arg2)
return self.tp - arg1 * arg2
class SampleA(Sample)
arg1 = 0.1
arg2 = 2
# I want to calculate arg3, but I don't know how to call the
# common_method here.
class SampleB(Sample)
.
.
.
我在问这个问题之前查了一下,但我没有看到类似的问题。
提前谢谢你。
答案 0 :(得分:0)
这可能是元类有意义的罕见情况之一。
class CommonProperty(type):
@property
def common_property(cls):
return cls.tp - cls.arg1 * cls.arg2
class Sample(object, metaclass=CommonProperty):
tp = 4
class SampleA(Sample):
arg1 = 0.2
arg2 = 2
print(SampleA.common_property) # 3.6
这个想法是将property
分配给由子类继承和完成的元类。元类在这里很自然,因为目标是创建类property
而不是实例property
,而类是元类的实例。
答案 1 :(得分:0)
dhke在原始问题的评论中提出了解决方案:
引用它
common_method()
需要一个对象,但您仍然在类声明中。common_method()
还有其他用途吗?因为那样你就可以将它设为class method并通过Sample.common_method()
我认为将它应用到代码中会更好:
class Sample(object):
tp = 4
dp = 4.2
por = 0.007
@classmethod
def common_method(self, arg1, arg2)
return self.tp - arg1 * arg2
class SampleA(Sample)
arg1 = 0.1
arg2 = 2
arg3 = Sample.common_method(arg1, arg2) # 3.8
class SampleB(Sample):
.
.
.
非常感谢你帮助我!