私のクラスのうちの2つは同じメソッドを持つ必要がありますが、それらは継承によって関連付けられていません。
以下はPython3で機能します。
class A(object):
def __init__(self):
self.x = 'A'
def printmyx(self):
print(self.x)
class B(object):
def __init__(self):
self.x = 'B'
printmyx = A.printmyx
a = A()
b = B()
a.printmyx()
b.printmyx()
とプリント
A
B
しかし、Python2では私は
Traceback (most recent call last):
File "py2test.py", line 18, in <module>
b.printmyx()
TypeError: unbound method printmyx() must be called with A instance as first argument (got nothing instead)
問題は、Python 3printmyx
では通常の関数であるのに対し、Python2ではバインドされていないメソッドであるということだと思います。
Python 2でコードを機能させる方法は?
編集
私の実際のコードでは、A
とB
別の親クラスから継承します。それらは1つのヘルパーメソッドを共有する必要がありますが、互いに他の関係はありません。
どうやら、Python 2では、バインドされていないメソッドが作成された元の関数がim_func
属性に格納されているようです。1
Python3と同じようにPython2でコードを機能させるには、次を使用します。
printmyx = A.printmyx.im_func
中B
さんの体。
1 Python2データモデルドキュメントの標準タイプ階層セクションで説明されています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加