2012-11-01 49 views
1

在Python,是否有任何聲明的類型的類成員被宣佈?類常量被def'd

class Foo: 
    def __init__(self, a, b): 
     self.one = a 
     self.two = b 

    ZERO = Foo(0, 0) 
    ONE = Foo(0, 1) 

這個問題似乎是一個事實,即類Foo沒有完全在評估對Foo.ZEROFoo.ONE時間def'd到出現 - 有什麼辦法來克服這一點的同時保持Foo.MEMBER形式?

+0

你能解釋爲什麼你需要做到這一點? – Blender

+0

我認爲目標是枚舉類型?類似於Java的'enum'語法,例如。 –

+0

這實際上不是用於枚舉(雖然它會是一個很好的應用!),而是常量,比如'java.lang.BigInteger.ZERO'等等。如果您願意,我正在爲操作研究中的應用程序嚴格編寫數字類 - [PyPLEX](http://en.wikipedia.org/wiki/CPLEX)。 –

回答

5

這似乎工作:

class Enum(object): 
    def __init__(self, a, b): 
     self.one = a 
     self.two = b 

    def __metaclass__(name, bases, dict): 
     cls = type(name, bases, dict) 
     cls.ZERO = cls(0, 0) 
     cls.ONE = cls(0, 1) 
     return cls 
0

我想這是不可能的! (也許我不清楚) 如果有可能,那麼這個原因, Foo有成員ZERO它也會生成Foo,並且再次....

我認爲如果可以生成類,蟒蛇還提醒你或其他東西。

1

這是可以做到這樣的:

class Foo: 
    def __init__(self, a, b): 
     self.one = a 
     self.two = b 

Foo.ZERO = Foo(0, 0) 
Foo.ONE = Foo(0, 1)