繁体   English   中英

装饰器和参数在python类中检查

[英]decorators and parameters check inside a python class

一类:

class Spam:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

实例化:

from Spam import *
c = Spam(1,5,4)

在这种情况下,要检查输入值'a'或'b'或'c'我有装饰器@ property,@ a.setter,@ b.setter,@ c.setter但...如果我需要检查此变量但它们没有直接复制到“私有”类变量中怎么办?

我的意思是

class Egg()
    def __init__(self, a, b, c):
        self.var = (a + b)*c

假设我需要检查a <c和c> b,对Egg类中的变量'a','b','c'执行检查并将其值绑定到某些标准的最佳方法是什么? ? 有没有特别的装饰? (我需要在类外保持代码“干净且易于理解”……这就是为什么我在实例化之前不执行检查)。

您是否考虑过不变性?

from collections import namedtuple

class Egg(namedtuple('Egg', 'a b c'))
    def __new__(cls, a, b, c):
        assert a < c and c > b
        return super(Egg, cls).__new__(a, b, c)

    @property
    def var(self):
        return (a + b)*c

暂无
暂无

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

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