Удаление заданного количества символов в конце строки с помощью ColdFusion

Вы не можете вызывать classmethod в определении class, потому что класс еще не определен полностью, поэтому нет ничего, чтобы передать метод в качестве его первого аргумента cls ... классического цыпленка- и-яйца. Однако вы можете обойти это ограничение, перегрузив метод __new__() в метаклассе и вызывая метод класса оттуда после создания класса, как показано ниже:

class Test(object):
    # nested metaclass definition
    class __metaclass__(type):
        def __new__(mcl, classname, bases, classdict):
            cls = type.__new__(mcl, classname, bases, classdict)  # creates class
            cls.static_init()  # call the classmethod
            return cls

    x = None

    @classmethod
    def static_init(cls):  # called by metaclass when class is defined
        print("Hello")
        cls.x = 10

print Test.x

Выход:

Hello
10
13
задан Peter Boughton 4 July 2010 в 00:28
поделиться