2014-09-16 4 views
2

Интересно, есть ли способ, чтобы получить имя класса автоматически при определении атрибута класса до инициализацииполучить имя класса, прежде инициализации при определении класса

class MyClass(object): 
    attribute1 = 1 
    attribute2 = 2 # This a simple example, MyClass has many other attributes 
    print className # normally one would use self.__class__.__name__ but self or cls are not defined at the level 

    def __init__(self): 
     a = 1 

Цель

В рамках я работаю, attribute1 и attribute2 являются объектными экземплярами (вы скажете, что все объектно ориентировано в python :)) Я хочу установить имя класса для этих атрибутов до инициализации MyClass. MyClass инициализируется много раз, и это гораздо больше, чем 2 атрибутов, что делает операцию очень много времени, чтобы сделать в каждой инициализации

+0

Зачем вам это нужно до инициализации? Класс не будет работать до тех пор, пока он не будет инициализирован, поэтому я не вижу смысла. – asdf

+0

Вы можете использовать метакласс - Но я точно не знаю, насколько это поможет вам, так как вы не сказали _why_ вам нужно имя класса. Возможно, если вы скажете нам, что вы на самом деле пытаетесь сделать здесь, мы можем указать вам в другом направлении. – mgilson

+0

Непонятно, что вы пытаетесь сделать, но вы должны взглянуть на метаклассы :) – Wolph

ответ

0

метакласс может быть использован для установки атрибута с именем класса до класса инициализирует :

class MyClassMeta(type): 
    def __init__(self, name, bases, attrs): 
     super(MyClassMeta, self).__init__(name, bases, attrs) 
     # Set class_name to the name of our class; in this case "MyClass" 
     self.class_name = name 

class MyClass(object): 
    __metaclass__ = MyClassMeta 

    def __init__(self): 
     # Prints "MyClass" 
     print(self.class_name) 

См this answer для подробного объяснения метаклассами.

Смежные вопросы