【发布时间】:2021-12-16 21:16:09
【问题描述】:
我一直在使用这种继承方式来验证对象实例上设置的值,但我想知道是否有更流畅的方法来做到这一点。
我遵循一个规范,其中特定分类 (Foo) 的项目包含特定组合 (Fe) 的元素。
class Typed:
def __set__(self, obj, value):
assert isinstance(value, self._type), 'Incorrect type'
class Integer(Typed):
_type = int
class Float(Typed):
_type = float
class Positive(Typed):
def __set__(self, obj, value):
super().__set__(obj, value)
assert value >= 0, 'Positive Values Only Accepted'
class PositiveInteger(Integer, Positive):
pass
class PositiveFloat(Float, Positive):
pass
class Sized(Typed):
def __set__(self, obj, value):
super().__set__(obj, value)
assert value <= 2**self.size-1, f'{value} is too High'
class Fe(Sized, PositiveInteger):
name = 'Integer, 8 bit unsigned'
size = 8
class Foo(Fe):
name = 'Classificaion1'
def __set__(self, obj, id):
super().__set__(obj, id)
obj._id = id
def __get__(self, obj, objType=None):
return obj._id
def __del__(self):
pass
【问题讨论】:
-
不要使用
assert;任何人都可以通过使用python -O ...运行脚本来禁用您的检查。使用if语句检查条件并改为引发ValueError。
标签: python inheritance multiple-inheritance python-descriptors