私はPythonを学んでおり、私はカードゲームをシミュレートしようとしています。 ドット表記に関する質問があります。私はインターネット上で特定の答えを探しましたが、見つけられませんでした。Pythonのドット表記法。オブジェクトの前後にメソッドを配置する必要がありますか?
なぜそれが、時には我々はこのようなドット表記でメソッドを呼び出すために教えられていることを、次のとおりです。
object.methodName()
我々はこのようにそれを呼び出すことが示されている他の回中:
className.methodName(object)
何違いは何ですか?
具体例を示します。これは本からのメソッドの定義である(コンピュータ・サイエンティストのように考える方法)
class Hand(Deck):
def __init__ (self, name = " "):
self.cards = []
self.name = name
def __str__(self):
s = "Hand "+ self.name
if self.isEmpty():
return s+" is empty\n"
else:
return s+ " contains\n" + Deck.__str__(self)
時にはオブジェクトはメソッドの前に来る:
self.isEmpty()
時にはオブジェクトが括弧内に、メソッドの後に来ます:
Deck.__str__(self)
どの方法を使用しますか?それは問題ですか?
'Deck'は*クラス*で、' Deck .__ str__'はアンバインドされたメソッドです。代わりに 'self .__ str __()'を試した場合は、 'Hand .__ str __()'メソッドをもう一度呼び出すと(無限の再帰エラーが発生します)、親クラスが必要なので明示的に呼び出されます。 –
しかし、そのようなクラスを呼び出すことはお勧めできません。代わりに 'super().__ str __()'を使います(親クラスが何であるかを 'super()'にし、 'Deck .__ str__'を' self'に正しく見つける方法)。 –
'Hand'サブクラスで' __str__'メソッドをオーバーライドするので、親バージョンの '__str__'を呼び出す必要があります。前述のように、より複雑な継承構造を扱うので、代わりに 'super().__ str __()'を実行する必要があります。 – tdelaney