我GOOGLE了一堆,似乎無法弄清楚如何真正做到這一點:如何使用模塊的功能在Python類
鑑於我有這樣一個通用的實用方法,以便:
def __square(n):
return n*n
然後我有一些類,我可能想在內部使用這個方法:
def __square(n):
return n*n
class Foo:
def __init__(self):
self.baz = 2
def bar(self):
return self.baz + __square(self.baz)
嗯,這是行不通的。我得到NameError '_Foo__square' is not defined
爲什麼?
正如我已經結束了做這樣的事情解決方法:
class Foo:
def __init__(self):
self.baz = 2
def bar(self):
return baz + self.square(self.baz)
def square(self,n):
return n*n
但是那種感覺傻傻的我,因爲平方函數無關,與一個Foo實例,也不會想到我還是希望它成爲Foo實例的一種方法。
什麼是處理這種事情的「pythonic」方式?
編輯
我想通了,這至少一部分:我得到這個行爲,因爲我覺得這些實用方法爲私有的,我已經命名他們像def __square(n):
。
我沒有意識到這很特別,當輸入上面的例子時,我最初並沒有那樣打字。我現在編輯了這個問題來反映它是如何實際輸入的。
所以現在我的問題是:爲什麼要把__
放在頂級方法的前面呢,還是好像呢?我明白這是用Python命名「私人事物」的慣例,因爲它在這種情況下不起作用,您會推薦什麼?
凡'square'在相對文件結構中定義的? – kojiro
無法重現。以前的代碼片段對我來說同樣適用於2.7和3.5版本。 –
當我在同一個文件中定義了相同的函數時,我已經得到了這個,相隔幾行。使用Python 3.5 – Andrew