如何使用类属性作为Python中的默认参数?
我想使用类属性作为同一类方法的标准参数(当用户不提供任何数据时,它就有一个默认值)如何使用类属性作为Python中的默认参数?,python,class,methods,parameters,properties,Python,Class,Methods,Parameters,Properties,我想使用类属性作为同一类方法的标准参数(当用户不提供任何数据时,它就有一个默认值) class Class: def __init__(self): self.property = True def method(self, parameter = False): if not parameter: parameter = self.property return parameter c = Class
class Class:
def __init__(self):
self.property = True
def method(self, parameter = False):
if not parameter:
parameter = self.property
return parameter
c = Class()
print(c.method())
print(c.method("False"))
>>>True
>>>False
上面的代码可以工作,但感觉很凌乱,有没有更聪明、更简洁的方法呢?我认为这是最简单的方法:
class Class:
property = True
def method(self, parameter = 0):
if not parameter:
parameter = Class().property
return parameter
print(Class().method())
print(Class().method("False"))
我想不出比这更简洁的了:
class Class:
def __init__(self):
self.property = True
def method(self, parameter=0):
return self.property if not parameter else parameter
如果您真的在
\uuuu init\uuuu
中硬编码默认值,那么最好(ab)使用class属性作为默认值
class Class:
_param_default = True
def method(self, parameter=_param_default):
return parameter
del _param_default # Optional, but it's not really a class attribute
如果这确实应该有一个特定于实例的默认值,那么就不能再缩短它了。该方法是在创建实例之前定义的,因此需要在运行时进行检查
class Class:
_sentinel = object()
def __init__(self):
self.property = True
def method(self, parameter=_sentinel):
if parameter is _sentinel:
parameter = self.property
return parameter
None
是更传统的sentinel,如果None
不是方法的有效参数,您可以使用它来代替\u sentinel
,这段代码有什么问题?你能提供更多的细节吗?@RiccardoBucco,它确实有效,但是没有更简洁的方法来获得相同的结果吗?你希望每个实例都有自己的默认值吗?可以使用类属性而不是实例属性。另外,None
将是一个比0更为传统的哨兵。大概的想法是,有多个方法将共享相同的默认值,否则是的,没有理由首先使用实例属性。使用类属性而不是实例属性会感觉更干净,谢谢。