class vs静态方法

时间:2017-08-20 00:15:19

标签: c# python oop

我是Python的新手(来自C#),试图找出OOP如何在这里工作。 从一开始我就开始尝试实现Vector课程。 我想要在Vector类中定义基础向量(i,j,k)。 在C#中,我可以这样做:

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

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

探索Python我找到了两种实现方法:使用@classmethod@staticmethod

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

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

由于我不需要访问课程内的任何信息,我应该真的使用@classmethod吗?

1 个答案:

答案 0 :(得分:1)

我认为你对自己的论点命名感到困惑。类方法接收的第一个参数是类本身,它现在是Vector,直到你有一个子类。类方法将实现如下:

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

通常,实例方法(没有装饰器)调用它的第一个参数self,它是实例。类方法有cls,它是类,可用于构造实例。静态方法不需要"额外"参数,所以如果你想总是返回Vector,你的另一个选择是:

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