2017-11-18 83 views
0

我想将一些java代码转换为python等价物,这样我可以在两者之间进行接口。所以在Java中我有一些像这样的代码:您可以在指定默认参数时使用self吗?

public int[] toArray(boolean order) { 
    return toArray(order, this.length()); 
} 
public int[] toArray(boolean order, int length) { 
    ... 
} 

和Python中的逻辑等价物可能是这样的:

def to_array(self, order): 
    return self.to_array(order, self.length()) 
def to_array(self, order, length): 
    ... 

除了...蟒蛇不允许函数重载,相反,它允许因为自己没有真正“存在

def to_array(self, order, length = self.length()): 
    ... 

但是......这也不能在Python允许,有可能:默认参数,所以,再次,它似乎是合乎逻辑,你会想要做这样的事情“直到w ithin函数的主体。

那么在Python中做这件事的正确方法是什么?或者它是不可能的?

编辑:我意识到,我使用的是应该返回一个值,所以现在他们返回int[]

回答

5

的Python的方式来做到这一点是使用None为默认值,再试着在我的Java代码void函数它:

def to_array(self, order, length=None): 
    if length is None: 
     length = self.length() 
+0

谢谢,这看起来像我在找什么。看起来像python会有一个更干净的方式做这个,虽然考虑到它喜欢把自己提升为一种语言,可以很容易地编写干净的代码 – JDOdle

+0

@JDOdle,但正如你所说*“自己并不真正”存在“,直到函数的主体“*,并且在定义时间设置默认参数值。当你还没有完成对班级的定义时,就不可能有一个实例! Python优先考虑*可读性*,其中的一部分是一致的概念模型。 – jonrsharpe

+0

@JDOdle我觉得这是一个相当干净的方式。如果你想用5种不同的版本重载一个函数,它可能会变得更乏味,但这是编译语言给你的优势。每种编程语言模型都以牺牲一些(已知的)缺点为代价提供了一些优点。就像琼斯哈普说的,这与每种语言认为更重要的是什么有关。有关私有方法的类似讨论[这里](https://stackoverflow.com/a/7456865/2243104)。在一天结束时,按照语言鼓励你的方式处理你的代码,而不是在另一个方面有意义。 – Reti43

相关问题