【发布时间】:2019-04-25 20:52:44
【问题描述】:
我正在制作一个简单的命令行游戏,但不确定如何在 Python 中为只读用户输入建模。
现在,我正在考虑声明一个名为 Input 的 ABC 并将其子类化:
import abc
class Input(abc.ABC):
@abc.abstractmethod
def is_valid(self, *args, **kwargs):
pass
@abc.abstractmethod
def pop(self):
pass
class NameInput(Input):
def __init__(self, name):
self._name = name
def is_valid(self, *args, **kwargs):
pass
def pop(self):
return self._name
我想出的另一种方法是使用 @property 装饰器:
import abc
class Input(abc.ABC):
@abc.abstractmethod
def is_valid(self, *args, **kwargs):
pass
@abc.abstractmethod
def value(self, value, *args, **kwargs):
pass
class NameInput(Input):
def __init__(self, name):
self._name = name
def is_valid(self, *args, **kwargs):
pass
@property
def value(self, value, *args, **kwargs):
return self._name
有没有更好的方法来实现我的目标?如果有,是什么?
供您参考,我的目标不仅仅是构建并运行一个程序,而是养成良好的编程习惯。请随意过于复杂并告诉我您在大型项目中喜欢的方式(为了可扩展性和可维护性)。
【问题讨论】:
-
您不需要该属性,只需将
value设为属性即可。还是您试图使价值无法设置?