【发布时间】:2010-12-19 22:29:33
【问题描述】:
我希望有以下形式的基于紧凑类的 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() 和MyOtherClass()。只想让这个只使用类定义。
MyClass.print_x_plus_z()
c = MyOtherClass
c.z = 5
c.print_x_plus_z()
assert MyOtherClass.z == 5, "instances don't share the same values!"
我使用元类并设法使_init_、print_x 和子类正常工作,但属性不起作用。
有人可以提出更好的选择吗?
我正在使用 Python 2.4+
【问题讨论】:
-
MyClass().print_x_plus_z()有什么问题?c=MyOtherClass()有什么问题?为什么不简单地正确使用 Python? -
或者在每节课后写
MyClass=MyClass()。 -
您可以将其视为大脑锻炼。我只想要我能做的最完美的通用 DSL。如果可能的话,我不想写 MyClass=MyClass() 或 MyClass().member。
-
我不明白打破语言如何创建“最完美的通用 DSL”。这似乎主要是为了制造混乱。
-
我不明白这个问题。这是不清楚和不完整的。如果你不想澄清它,也许你不应该问。请澄清问题,以便可以回答。你想做什么?为什么要颠覆对象定义?有什么意义?
标签: python class singleton properties dsl