gpt4 book ai didi

python - 透明地为自定义数字类型赋值

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:55 27 4
gpt4 key购买 nike

我想创建一个自定义数字类型。基本上是一个 float ,其值在分配后由我的自定义类处理。我有 seen examples解释了如何创建类并将其作为通用类型(int/float/...)读取。然而,没有关于如何使值赋值像浮点变量一样透明的示例。

到目前为止我看到的是这样的:

a = MyCustomFloat( 20. )
print(a) # prints "20"

我正在寻找的是:

a = MyCustomFloat()
a = 20. # assign new value ; "a" is still an instance of MyCustomFloat
print(a) # prints "20"

这可能吗?

如果是,怎么办?

最佳答案

无法在变量级别覆盖此行为,但可以实现 using descriptors如果您愿意将 a 定义为类的属性。

class MyCustomClass:
def __init__(self, val):
self.val = val

def __get__(self, instance, kls=None):
return self

def __repr__(self):
return repr(self.val)

def __set__(self, instance, val):
if not isinstance(val, (int, float)):
raise TypeError('Only objects of type int and float can be assigned')
self.val = val # This can be self.val = MyCustomClass(val) as well.


class NameSpace:
a = MyCustomClass(20.)

演示:

>>> namespace = NameSpace()

>>> namespace.a
20.0

>>> type(namespace.a)
<class '__main__.MyCustomClass'>

>>> namespace.a = 12

>>> type(namespace.a)
<class '__main__.MyCustomClass'>

>>> namespace.a
12

>>> namespace.a = '1234'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-40-6aced1b81d6b> in <module>()
----> 1 namespace.a = '1234'
...
TypeError: Only objects of type int and float can be assigned

在可变级别,您唯一的选择是使用 mypy 进行一些静态检查(正如克里斯也提到的那样)。这不会在运行时阻止此类分配,但可以在部署代码之前运行静态代码分析器时指出此类分配。

关于python - 透明地为自定义数字类型赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com