2

我有一个类和一个属性writable_attributes,它是一个属性数组,在类被实例化时应该可以设置:

class User(object):
    writable_attributes = ['username','email']

如果设置了另一个属性(如果它不在writable_attributes. 我正在浏览一个通用的二传手,但我找不到任何适合我需要的东西。就像是:

user = User()
user.foo = 'bar' # This should raise an error since only `username` and `email` can be set
4

3 回答 3

2

听起来您真正要寻找的是__slots__.

于 2012-06-01T06:51:50.787 回答
2

首先,重新考虑您是否真的需要这样做。它通常是过度设计的。如果您确实决定确实需要,请查看__slots__- 如果您将您的重命名writable_attributes__slots__,则尝试创建更多内容将是错误的。如果您需要避免某些现有的在设置一次后被写入,您可以使用属性来做到这一点。

于 2012-06-01T06:52:12.123 回答
2

您可能还对__setattr__. 这会覆盖对象的属性设置。 slot具有setattr所没有的其他复杂性。

于 2012-06-01T07:01:59.750 回答