你喜欢什么样的行为?(嵌入Python)

2024-04-25 21:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将Python嵌入到一个应用程序中。MyClass.namestr类型的属性:

>>> 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

Tags: 用户name应用程序default类型most属性foo
2条回答

一定要引发TypeError,而不是试图自动强制。通常我会保守地说,有些东西是“pythonic”或不是-这是其中的一个词,真正的意思是“说话者认为这是好的”-但如果它意味着什么,它必须提到adhering to the Zen of Python,在这种情况下,这是格言12:“面对歧义,拒绝诱惑猜测。”

现在,你只是在看整数,但是浮点数,或者Decimals,或者Fractions呢?您使用的是您的值的str还是repr?右边的字符串值是“Decimal('10')”还是“10”(如果您有Decimal实例)?那么元组、列表、字符串、字节、数组、dict以及Python中的所有其他内置类型呢?对于用户定义的类型,你还不知道,也永远不知道,因为它们是一个尚未编写的程序的一部分?你知道吗

您的库不太可能足够特殊,以至于有奇怪的、自动的行为,会让习惯Python约定的人感到困惑。然而,如果你不能很好地回答这些特殊的问题,那么你就可以很好地解决这些问题。(格言9:“虽然实用胜过纯粹。”)但它确实是一个非常罕见的真正需要这种行为的图书馆,如果你这么做了,记录下它的见鬼去吧,这样当它做了一些令人惊讶的事情时,你的用户(甚至可能只是你自己!)你可以回去看看具体的规则。你知道吗

这取决于你想要达到什么目标。我认为最好的解决方案是允许将任何对象强制为string,然后使用python属性。你知道吗

class MyClass(object):

  def set_name(self, name):
    self._name = str(name)
  def get_name(self):
    return self._name
  name = propert(get_name, set_name)

相关问题 更多 >