Python中的紧凑类DSL

2024-04-23 07:41:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个紧凑的基于类的python dsl,格式如下:

class MyClass(Static):
    z = 3
    def _init_(cls, x=0):
        cls._x = x

    def set_x(cls, x):
        cls._x = x

    def print_x_plus_z(cls):
        print cls._x + cls.z

    @property
    def x(cls):
        return cls._x

class MyOtherClass(MyClass):
    z = 6
    def _init_(cls):
        MyClass._init_(cls, x=3)

我不想以后再写MyClass()和{}。只想让它只使用类定义。在

^{pr2}$

我使用了元类并设法使_init_print_x和子类化正常工作,但是属性不起作用。 有人能提出更好的选择吗? 我使用的是python2.4+


Tags: return定义initdef格式myclassstaticplus
1条回答
网友
1楼 · 发布于 2024-04-23 07:41:06

要给一个(而不是它的实例)一个属性,您需要将该property对象作为类元类的属性(因此您可能需要创建一个自定义元类,以避免将该属性强加给具有相同元类的其他类)。类似地,对于特殊方法,如__init__如果它们在类中,它们会影响实例(您不希望创建实例)以使它们影响类,则需要将它们放在(自定义)元类中。你想通过编程“一个metalevel up”来实现什么呢?也就是说,从来没有用自定义元类实例化类,而不是普通类的普通实例?这似乎只是一点点额外的工作没有回报;-)。在

相关问题 更多 >