Python 2.5.4。对Python来说还是个新手,昨晚对装修师来说还是全新的。如果我有一个具有多个布尔属性的类:
class Foo(object):
_bool1 = True
_bool2 = True
_bool3 = True
#et cetera
def __init__():
self._bool1 = True
self._bool2 = False
self._bool3 = True
#et cetera
有没有一种方法可以使用一个修饰符来检查任何布尔属性的设置是否必须是布尔值,并为这些变量中的任何一个返回布尔值?在
换句话说,相对于每个属性都是这样的?在
^{pr2}$我试过这样写:
def stuff(obj):
def boolx():
def fget(self):
return obj
def fset(self, value):
if value <> True and value <> False:
print "Non-bool value" #name of object???
exit()
obj = value
return locals()
return property(**boolx())
bool1 = stuff(_bool1)
bool2 = stuff(_bool2)
bool3 = stuff(_bool3)
这给了我:
File "C:/PQL/PythonCode_TestCode/Tutorials/Decorators.py", line 28, in stuff
return property(**boolx())
TypeError: 'obj' is an invalid keyword argument for this function
关于如何正确地做这件事有什么建议吗?在
谢谢
保罗
您可以尝试使用descriptor:
编辑:
正如S.Lott提到的,python更喜欢Duck Typing而不是类型检查。在
两件重要的事。在
首先,“类级别”属性由类的所有实例共享。就像Java中的
static
。你的问题不清楚你是否真的在谈论类级别的属性。在一般来说,大多数OO编程都是用实例变量完成的,就像这样。在
第二点。我们不会浪费很多时间来验证参数的类型。在
如果一个神秘的“某人”提供了错误的数据类型,我们的类就会崩溃,这几乎是最好的结果。在
为了让类在不同的地方崩溃,在类型和域验证上大惊小怪是一件很费事的事。最终,异常(
TypeError
)是相同的,因此额外的检查结果没有什么实际价值。在实际上,当有人创建
bool
的替代实现,并且您的类拒绝这个完全有效的类,该类具有与内置的bool
相同的功能时,额外的域检查可能(而且经常会)适得其反。在不要将人工输入范围检查与Python类型检查混为一谈。人工输入(或从文件或URI中读取的内容)必须range选中,但不能进行类型检查。执行外部数据读取的应用程序部分定义了类型。不需要检查类型。不会有什么神秘的。在
“如果我使用了错误的类型,而我的程序似乎可以工作,但没有用呢”的场景实际上没有任何意义。首先,找出两种行为完全相同但结果略有不同的类型。唯一的例子是
int
与float
,唯一真正重要的是除法,这由两个除法运算符处理。在如果你“不小心”使用了一个需要数字的字符串,你的程序就会死掉。可靠。一贯地。在
相关问题 更多 >
编程相关推荐