假设我们得到了以下代码:
class NonNegative():
def __set_name__(self, owner, name):
self.name = name
def __get__(self, instance, owner):
if instance is None:
return self
return instance.__dict__[self.name]
def __set__(self, instance, value):
instance.__dict__[self.name] = value
class Person:
fingerCount = NonNegative()
eyesCount = NonNegative()
def __init__(self, name):
self.name = name
p = Person("name")
print(p.fingerCount) <----- I want a default value printed here, instead of a KeyError
print(p.eyesCount) <----- ------ | | ------
如何分别为fingerCount和eyesCount指定默认(初始)值
这样我就不必做:
p = Person("name")
p.fingerCount = 10
p.eyesCount = 2
print(p.fingerCount) # output: 10
print(p.eyesCount) # output: 2
,但我们只能做到:
p = Person("name")
print(p.fingerCount) # output: 10
print(p.eyesCount) # output: 2
对于更静态的硬编码解决方案
将默认值传递给
__init__
方法,该方法将保存该值,以便在instance.__dict__[self.name]
尚不存在时使用如果愿意,可以将
NonNegative
子类化,以提供特定于用例的默认值如果需要属性的每个实例起始值,请像任何其他属性一样,通过
__init__
中的setter初始化该属性相关问题 更多 >
编程相关推荐