再一次,有点惊讶没有找到这个问题的答案......
我提出这个问题的真实原因是: 我在一个类中有一个常量字典
class MySQLConstants():
DECIMAL = 0
TINY = 1
SHORT = 2
LONG = 3
FLOAT = 4
DOUBLE = 5
... etc.
我想要一本字典,这样我就可以在给定数字的情况下找到常量……很简单:
fieldTypeDic = {}
for fieldType in dir( MySQLConstants ):
value = getattr( MySQLConstants, fieldType )
fieldTypeDic[ value ] = fieldType
...在类定义语句执行后,将其设为 MySQLConstants 的 @static 方法并通过 MySQLConstants.createDic() 调用它就足够容易了...但我只是想知道是否有任何方法获得一个方法,不可避免地@static,在创建一个类(注意我不是谈论创建此类的实例!)时运行...
最佳答案
这是一个使用元类的解决方案:
class ConstantDictMeta(type):
def __new__(cls, name, bases, dct):
fieldTypeDic = dict((v, k) for k, v in dct.items() if k.isupper())
dct["fieldTypeDic"] = fieldTypeDic
return type.__new__(cls, name, bases, dct)
class MySQLConstants():
__metaclass__ = ConstantDictMeta
DECIMAL = 0
TINY = 1
SHORT = 2
LONG = 3
FLOAT = 4
DOUBLE = 5
>>> MySQLConstants.fieldTypeDic
{0: 'DECIMAL', 1: 'TINY', 2: 'SHORT', 3: 'LONG', 4: 'FLOAT', 5: 'DOUBLE'}
关于python - 有没有办法在创建类(不是实例)时调用(静态)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826651/