使用super方法计算类参数

时间:2017-08-08 16:04:14

标签: python inheritance parameter-passing superclass

我是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)

.
.
.

我在问这个问题之前查了一下,但我没有看到类似的问题。

提前谢谢你。

2 个答案:

答案 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):

.
.
.

非常感谢你帮助我!