2015-08-17 107 views
-5

有沒有辦法讓我的類從類變量中取出?Python中的類變量類

class T(): 
    x = 5 
    y = 6 

我的函數接受爲參數T.x,我也想得到T.y。

+0

你是什麼意思*將類從類變量*中取出? –

+0

不,你不能從值中知道什麼類引用它。你的函數傳遞'5',而不是'T.x',並且該整數對象不會告訴你存在什麼引用。 –

+0

如果你問「當我調用'some_function(T.x)'時,是否有'some_function'確定類'T'的方法,然後找到'T.y'?」,那麼,沒有。就'some_function'而言,您傳遞給它的值是一個簡單的整數,沒有可跟蹤的信息。 – Kevin

回答

0

從技術上講,你可以做這樣的事情,使用元類:(Python 3中):

class MetaT(type): 
    def __new__(meta, name, bases, dct): 
     for k in dct: 
      #print("wrapping %s"%k) 
      class Wrap(type(dct[k])): 
       __parent_class__ = None 
      dct[k] = Wrap(dct[k]) 
     return super(MetaT, meta).__new__(meta, name, bases, dct) 

    def __init__(cls, name, bases, dct): 
     for k in dct: 
      dct[k].__parent_class__ = cls 
     super(MetaT, cls).__init__(name, bases, dct) 

class T(metaclass=MetaT): 
    x = 8 
    y = 9 

def get_other_attribute(arg): 
    print("I got passed", arg) 
    print("The parent class is", arg.__parent_class__) 
    print("So I can reach attribute y:", arg.__parent_class__.y) 

get_other_attribute(T.x) 

然而,這個黑客是,你應該不使用它,你將不得不審查你的設計。我只是讓它學習了一點關於Python的知識,並且證明它可以在充分的黑客攻擊下完成。