2016-12-27 158 views
-1

我想在init中初始化一個函數/方法。 因此,類A中的self.y返回正確的值10.或者可能在A中使用方法get_y?類結構中的變量初始化

請參考下面的代碼和註釋。如圖所示感謝

class A(object): 
    def __init__(self): 
     self.x = 5 
     self.y = None 
     # self.y = B.eval(self)?? # wants y to be a value obtained from B.eval() 
    def get_x(self): 
     return self.x 

    def get_y(self): 
     # wants y to be a value obtained from B.eval() 
     #return B.eval(self) ?? 

class B(object): 
    def eval(ClassA): 
     """ 
     :param ClassA: is an instance of A 
     :return: value 
     """ 
     return ClassA.get_x() + 5 


a = A() 
b = B() 
print(a.get_y()) # wants value 10 printed out here 
print(B.eval(a)) 
+1

目前還不清楚你在問什麼。你想知道什麼? – UnholySheep

+1

您可能希望調查「property」的使用 - 屬性是一個在您設置,獲取或刪除時自動運行用戶定義代碼的屬性:https://docs.python.org/2/library/functions。 html#property – jez

+2

你能否給出一個你想要實現的抽象例子? 「B」有什麼意義? – jonrsharpe

回答

0

只是要B.eval()一個classmethod使用它作爲class B的方法裝飾:

class A(object): 
    def __init__(self): 
     self.x = 5 
     self.y = None 
     self.y = B.eval(self) 
    def get_x(self): 
     return self.x 

    def get_y(self): 
     return B.eval(self) 

class B(object): 
    @staticmethod # ADD THIS LINE 
    def eval(ClassA): 
     """ 
     :param ClassA: is an instance of A 
     :return: value 
     """ 
     return ClassA.get_x() + 5 

a = A() 
b = B() 
print(a.get_y()) # -> 10 
print(B.eval(a)) # -> 10 
+0

感謝您的答案。 –

+0

不客氣。這是必需的,因爲'eval()'沒有'self'參數,而且您在不創建實例的情況下調用它:'B.eval(a)'。請注意,將它定義在'class B'中並不是簡單地將它定義爲獨立函數(名稱不同於'eval'以避免禁用具有相同名稱的內置函數)。 – martineau