2017-08-20 84 views
0

我是Python新手(來自C#),試圖弄清楚OOP如何在這裏工作。 從開始就開始嘗試實現Vector類。 我想要有在Vector類中定義的基向量(i,j,k)。 在C#中,我能做到這樣的:class vs static methods

public class Vector 
{ 
    // fields... 
    public Vector(int[] array){ 
     //... 
    } 

    public static Vector i(){ 
     return new Vector(new int[1, 0, 0]); 
    } 
} 

探索的Python我發現2種方式如何實現這一點:無論是使用@classmethod@staticmethod

class Vector: 
    def __init__(array): 
     #... 

    @classmethod 
    def i(self): 
     return Vector([1, 0, 0]) 

因爲我並不需要有訪問課堂內的任何信息,我真的應該使用@classmethod嗎?

回答

1

我認爲你已經混淆了你自己的爭論點名。類方法接收的第一個參數是類本身,直到你有一個子類,它現在是Vector。一類方法將實施這樣的:

@classmethod 
    def i(cls): 
     return cls([1, 0, 0]) 

通常,一個實例方法(無裝飾)調用它的第一個參數self,這是實例。類方法有cls,它是可用於構造實例的類。靜態方法不需要「額外」參數,因此如果要始終返回Vector,則其他選項是:

@staticmethod 
    def i(): 
     return Vector([1, 0, 0])