设置描述符的默认(初始)值

问题描述 投票:0回答:2

假设我们得到以下代码:

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
python object properties instance descriptor
2个回答
1
投票

将默认值传递给__init__方法,当instance.__dict__[self.name]不存在时,将其保存以供使用。


0
投票

用于更静态的硬编码解决方案

© www.soinside.com 2019 - 2024. All rights reserved.