如何定义从零 class 继承的 class 允许您修改 self._x 变量

How to define a class inherited from the Zero class that allows you to modify the self._x variable

这是我的零 class:

class ZeroClass():
    def __init__(self, x):
        self._x = x
    def __call__(self, w):
        return w * self._x

如果我 运行 下面的代码,它 returns 500:

s = ZeroClass(100.)
print(s(5))

现在,我需要实现 class 'AdjustZero' 允许通过 xSet 方法

更改变量 self._x
class AdjustZero(ZeroClass):
    def xSet():

如何做到这一点?

你只需要像那样分配变量。我假设你的 Zero class 只是你的 Scale class.

class Scale:
    def __init__(self, x):
        self._x = x

    def __call__(self, w):
        return w * self._x


class AdjustZero(Scale):
    def xSet(self, x):
        self._x = x


s = AdjustZero(100.)
print(s(5))
s.xSet(10)
print(s(5))

输出为:

500.0
50

首先,如果你想让它成为零 class,那么 Scale 的名称应该是“Zero”,就像这样:class Zero:。可以将比例重命名为零来执行此操作。 Class 不从其他 class 继承的定义也不需要括号*。

接下来,class 的方法都应该有一个参数“self”,例如:def xSet(self)。 xSet(self) 还需要您设置的新值,因此也需要作为参数:xSet(self, new_x)。最后,方法需要调整self._x,改为new_x,所以:

class AdjustZero(Zero):
    def xSet(self, new_x):
        self._x = new_x

另请注意:如果您希望零的子 class 的所有刻度都具有可调零,则可以将 xSet 方法移动到零 class.

为清楚起见,保留名称“Scale”并使 AdjustZero 继承自 Scale 也可能有意义。

*Classes 在 Python 3 中隐式继承自“object”,而在 Python 2 中,必须通过将 classes 定义为class class_name(object): 如果这是针对 Python 2 的任何方式,那么您编写的所有 classes 都应该明确地继承自对象。