我想创建自定义数字类型。基本上是一个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"
这有可能吗?
如果是,怎么样?
答案 0 :(得分:3)
无法在变量级别覆盖此行为,但如果您愿意将fputs( $output, "\xEF\xBB\xBF" );
fputcsv($output, mb_convert_encoding($myrow, 'UCS-2LE', 'UTF-8'));
定义为类的属性,则可以实现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.)
在可变级别,您唯一的选择是使用mypy进行一些静态检查(正如Chris提到的那样)。这不会在运行时阻止此类分配,但可以在部署代码之前运行静态代码分析器时指出此类分配。
答案 1 :(得分:0)
由于Python是一种动态语言,你可以在以后分配你想要的任何东西,所以事先声明它的类型可能对你没有任何好处,因为你可以这样做:
a = MyType()
a = 'hi'
a = 2.3
这意味着,如果您执行类似
的操作a = MyType()
a = 20.
type(a)
它可能会返回默认值(float或float64)。如果您想要静态类型之类的内容(一旦您声明a
类型为MyType
,它就会保持这种状态)我推荐使用类似mypy
希望有所帮助