我在思考同样的事情,并想出了一个帮助方法,用于返回一个从提供的类型继承的类。
这个帮助函数定义并返回了该类,它是从提供的类型继承而来的。
当我正在工作一个“命名值”类时,解决方案呈现出来。我想要一个可以拥有自己名称的值,但它可以像普通变量一样运行。我认为这个想法主要可以用于调试过程。这里是代码:
def getValueClass(thetype):
"""Helper function for getting the `Value` class
Getting the named value class, based on `thetype`.
"""
class Value(thetype):
__text_signature__ = "(value, name: str = "")"
__doc__ = f"A named value of type `{thetype.__name__}`"
def __init__(self, value, name: str = ""):
"""Value(value, name) -- a named value"""
self._name = name
def __new__(cls, value, name: str = ""):
instance = super().__new__(cls, value)
return instance
def __repr__(self):
return f"{super().__repr__()}"
def __str__(self):
return f"{self._name} = {super().__str__()}"
return Value
一些例子:
IValue = getValueClass(int)
FValue = getValueClass(float)
CValue = getValueClass(complex)
iv = IValue(3, "iv")
print(f"{iv!r}")
print(iv)
print()
fv = FValue(4.5, "fv")
print(f"{fv!r}")
print(fv)
print()
cv = CValue(7 + 11j, "cv")
print(f"{cv!r}")
print(cv)
print()
print(f"{iv + fv + cv = }")
输出:
3
iv = 3
4.5
fv = 4.5
(7+11j)
cv = (7+11j)
iv + fv + cv = (14.5+11j)
工作在IDLE时,变量的行为似乎像内置类型一样,除了打印之外。
>>> vi = IValue(4, "vi")
>>> vi
4
>>> print(vi)
vi = 4
>>> vf = FValue(3.5, 'vf')
>>> vf
3.5
>>> vf + vi
7.5
>>>
use3 = C(a=True, b=True)
,会发生什么? - eripC
成为一个基类(包含你想要一直使用的任何方法和属性),而A
和B
应该是子类,用于特定情况下的类别化(例如self.history
是一个特定类型)。按照你现在的设置,这没有任何意义。 - Blckknght