Pythonのコンストラクタ___init__
_の引数を理解したい。
_class Num:
def __init__(self,num):
self.n = num
def getn(self):
return self.n
def getone():
return 1
myObj = Num(3)
print myObj.getn()
_
結果:3
getone()
メソッドを呼び出します:
_print myObj.getone()
_
結果:エラー 'getone()'は引数を取りません(1を指定)。
だから私は置き換えます:
_def getone():
return 1
_
と
_def getone(self):
return 1
_
結果:1これで問題ありません。
ただし、getone()
メソッドには引数は必要ありません。
意味のない引数を使用する必要がありますか?
Pythonの場合:
self
引数が必要です。self
)またはクラス(cls
)引数のいずれも必要としません。__init__
は特別な関数であり、__new__
常に最初の引数としてクラスのインスタンスが与えられます。
組み込みのclassmethodおよびstaticmethodデコレータを使用した例:
import sys
class Num:
max = sys.maxint
def __init__(self,num):
self.n = num
def getn(self):
return self.n
@staticmethod
def getone():
return 1
@classmethod
def getmax(cls):
return cls.max
myObj = Num(3)
# with the appropriate decorator these should work fine
myObj.getone()
myObj.getmax()
myObj.getn()
そうは言っても、@classmethod
/@staticmethod
控えめに。 staticmethod
sのみで構成されるオブジェクトを作成していることに気付いた場合は、関連する関数の新しいモジュールを作成するのがよりPython的なことです。
すべてのメソッドは、1つの引数(インスタンス自体(または静的メソッドの場合はクラス))を受け入れる必要があります。
メソッドがseself
引数(メソッドがアタッチされているインスタンスへの参照)ではないという事実は、それを省略できるという意味ではありません。 Pythonは常にそれを渡そうとするため、常にそこにある必要があります。
pythonでは、少なくとも1つの引数をクラスメソッドに常に渡す必要があります。引数はself
であり、インスタンス自体への参照では無意味ではありません
現在のオブジェクトは、最初のパラメーターとしてメソッドに明示的に渡されます。 self
は従来の名前です。任意の名前を付けることができますが、混乱を避けるためにこの規則を守ることを強くお勧めします。