我是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
吗?
答案 0 :(得分:1)
我认为你对自己的论点命名感到困惑。类方法接收的第一个参数是类本身,它现在是Vector,直到你有一个子类。类方法将实现如下:
@classmethod
def i(cls):
return cls([1, 0, 0])
通常,实例方法(没有装饰器)调用它的第一个参数self
,它是实例。类方法有cls
,它是类,可用于构造实例。静态方法不需要"额外"参数,所以如果你想总是返回Vector
,你的另一个选择是:
@staticmethod
def i():
return Vector([1, 0, 0])