【发布时间】:2017-06-09 14:14:32
【问题描述】:
我认为答案是否定的,但如果有机会,那会让我的生活轻松很多。考虑以下代码:
class SchemaString(unicode):
_schema = dict()
def validate(self):
errors = []
# some validation function using class propertie _schema, not important
return sorted(list(set(errors)))
s = SchemaString("Hello")
e0 = s.validate()
我想要的是以下仍然有效:
s = "World"
e1 = s.validate()
>> AttributeError: 'str' object has no attribute 'validate'
因此,我的问题是是否有可能在新分配后仍然使用相同的对象,这样我仍然可以使用“验证”方法。换句话说,在python中使用'='时是否使用了一些内部赋值函数,这个赋值函数可以被覆盖吗?
【问题讨论】:
-
自己尝试看起来并不难 - 让我们知道会发生什么?
-
答案是否定的,您不能覆盖分配。除此之外,为此使用类似乎没有必要。子类化
str、unicode、dict、tuple和朋友在微妙的方面几乎总是错误的。为什么不使用简单的独立功能?你可以functools.partial把模式状态放进去,有一个函数validate_foobar = functools.partial(validate, foobar_schema)然后validate_foobar(s)
标签: python string inheritance unicode