我有类容器,可以将自己转换为另一个类。
例如,我有一些类型,例如MyFloat
MyStr
或MyInt
,提供其他方法或属性。我想将决定将这些类型构建到另一个类中:
我的第一次尝试是写下这个:
class MyFloat(float):
def foo_float():
pass
class MyStr(str):
def foo_str():
pass
class MyInt(int):
def foo_int():
pass
# Does not work
class Polymorph(object):
def __init__(self, value):
if isinstance(value, float):
self = MyFloat(value)
elif isinstance(value, int):
self = MyInt(value)
elif isinstance(value, str):
self = MyStr(value)
else:
raise TypeError, 'Unknown type'
不幸的是,我最终没有得到预期的实例:
>>> a = Polymorph(42.42) # Should get an instance of MyFloat
>>> type(a)
__main.MyFloat
然后我尝试使用__new__
代替
class Polymorph(object):
def __new__(cls, value):
if isinstance(value, float):
return super(MyFloat, cls).__new__(cls, value)
elif isinstance(value, int):
return super(MyInt, cls).__new__(cls, value)
elif isinstance(value, str):
return super(MyStr, cls).__new__(cls, value)
else:
raise TypeError, 'Unknown type'
但这次我得到TypeError: super(type, obj): obj must be an instance or subtype of type
有可能实现这个目标吗?
答案 0 :(得分:1)
所以我发现这个解决方案有效。但是,我不知道这样做是否可以接受Pythonic。
class Polymorph(object):
def __new__(cls, value):
if isinstance(value, float):
return MyFloat(value)
elif isinstance(value, int):
return MyInt(value)
elif isinstance(value, str):
return MyStr(value)
else:
raise TypeError, 'Unknown type'