我正在将Python嵌入到一个应用程序中。MyClass.name
是str
类型的属性:
>>> foo = MyClass()
>>> foo.name
'Default Name'
我是否应该允许用户这样做:
>>> foo.name = 123
>>> foo.name
'123'
还是不?你知道吗
>>> foo.name = 123
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: name must be a string
一定要引发
TypeError
,而不是试图自动强制。通常我会保守地说,有些东西是“pythonic”或不是-这是其中的一个词,真正的意思是“说话者认为这是好的”-但如果它意味着什么,它必须提到adhering to the Zen of Python,在这种情况下,这是格言12:“面对歧义,拒绝诱惑猜测。”现在,你只是在看整数,但是浮点数,或者Decimals,或者Fractions呢?您使用的是您的值的
str
还是repr
?右边的字符串值是“Decimal('10')”还是“10”(如果您有Decimal
实例)?那么元组、列表、字符串、字节、数组、dict以及Python中的所有其他内置类型呢?对于用户定义的类型,你还不知道,也永远不知道,因为它们是一个尚未编写的程序的一部分?你知道吗您的库不太可能足够特殊,以至于有奇怪的、自动的行为,会让习惯Python约定的人感到困惑。然而,如果你不能很好地回答这些特殊的问题,那么你就可以很好地解决这些问题。(格言9:“虽然实用胜过纯粹。”)但它确实是一个非常罕见的真正需要这种行为的图书馆,如果你这么做了,记录下它的见鬼去吧,这样当它做了一些令人惊讶的事情时,你的用户(甚至可能只是你自己!)你可以回去看看具体的规则。你知道吗
这取决于你想要达到什么目标。我认为最好的解决方案是允许将任何对象强制为string,然后使用python属性。你知道吗
相关问题 更多 >
编程相关推荐