如何在 Python 中执行 class.variable.variable?
How to do class.variable.variable in Python?
class SubscriptionPrice:
FREE = 0
STARTER_PACK = 300
class SubscriptionTypes:
FREE = "FREE"
STARTER_PACK = "STARTER_PACK"
我有 2 个订阅计划,一个是免费的,另一个称为 STARTER PACK。我已经声明两个 classes 像常量一样工作。但是现在,我想将那些 classes 合并为一个 class.
我如何构建这个 class 并能够像这样调用它:
SubscriptionPlan.STARTER_PACK # return str("STARTER_PACK")
SubscriptionPlan.STARTER_PACK.price # return int()
而不是有两个不同的class。
如果可以的话,这个叫什么?我尝试了 @property
装饰器和多级函数,但没有成功。我用了Python 3.7
,顺便说一句。
我认为您可能以错误的方式解决了这个问题。但是,如果你喜欢用点运算符引用事物,那么你可以使用这个 class
class AttrDict(dict):
def __init__(self, *args, **kwargs):
super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
那么你可以这样做。
>>> this = AttrDict( {'a':1, 'b':2} )
>>> this.a
1
>>> this.b
2
为了你的目的,你嵌套了它们
>>> this = AttrDict( {'STARTER_PACK': AttrDict({'price': 1234}) , 'FREE':2} )
>>> this.STARTER_PACK
{'price': 1234}
>>> this.STARTER_PACK.price
1234
class SubscriptionPrice:
FREE = 0
STARTER_PACK = 300
class SubscriptionTypes:
FREE = "FREE"
STARTER_PACK = "STARTER_PACK"
我有 2 个订阅计划,一个是免费的,另一个称为 STARTER PACK。我已经声明两个 classes 像常量一样工作。但是现在,我想将那些 classes 合并为一个 class.
我如何构建这个 class 并能够像这样调用它:
SubscriptionPlan.STARTER_PACK # return str("STARTER_PACK")
SubscriptionPlan.STARTER_PACK.price # return int()
而不是有两个不同的class。
如果可以的话,这个叫什么?我尝试了 @property
装饰器和多级函数,但没有成功。我用了Python 3.7
,顺便说一句。
我认为您可能以错误的方式解决了这个问题。但是,如果你喜欢用点运算符引用事物,那么你可以使用这个 class
class AttrDict(dict):
def __init__(self, *args, **kwargs):
super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
那么你可以这样做。
>>> this = AttrDict( {'a':1, 'b':2} )
>>> this.a
1
>>> this.b
2
为了你的目的,你嵌套了它们
>>> this = AttrDict( {'STARTER_PACK': AttrDict({'price': 1234}) , 'FREE':2} )
>>> this.STARTER_PACK
{'price': 1234}
>>> this.STARTER_PACK.price
1234