繁体   English   中英

从__init __()设置Python属性

[英]Setting a Python property from __init__()

我想定义一个在设置/修改属性时确保某些约束的类。 此外,我希望能够在具有相同约束的情况下在构造上设置属性值。 简化示例:

class MyClass(object):
    def __init__(self, attrval):
        self.myattr = attrval

    @property
    def myattr(self):
        return self._myattr

    @myattr.setter
    def myattr(self, value):
        if value is None:
            raise ValueError("Attribute value of None is not allowed!")
        self._myattr = value

我直接从init ()调用属性设置器,因此该属性是直接访问self._myattr的唯一位置。 使用这样的属性(例如_myattr的丢失或无效创建)是否有任何问题或警告? 也许什么时候(多重)继承? 是否存在有关如何从init ()正确初始化属性的PEP或其他“官方”声明?

我发现的大多数属性示例都不使用构造函数中的属性设置器。 如何在__init__中设置python属性中 ,将在设置属性之前显式创建基础属性。 有人认为每个属性都必须在init ()中显式初始化,这就是为什么我的代码示例有些奇怪。

不会有任何问题。 使用对您有用的东西。

要记住的一件事是,使用setter设置属性会运行您已设置的验证。 直接在__init__设置属性不会执行该验证。 这将使setter版本更慢,但由于不允许使用某些值而更加安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM