2017-08-20 26 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])