PythonでOOPパラダイムを「再生」しているときに、私は誤解を感じました。 のは、いくつかの小さな例を見てみましょう:最初の印刷例のID番号は、両方のインスタンスで同じである理由Pythonで変数を代入することなくクラスインスタンスを作成して比較する
class A(object):
pass
print id(A()), id(A()) # 139865221604432 139865221604432
print id(A()) == id(A()) # True
print A() is A() # False
a1 = A()
print id(a1) # 139865221604432
a2 = A()
print id(a2) # 139865220638096
そこで質問です。 A() is A()
を見ると、すべてが「ok」であり、結果はFalseであることがわかります。わかりませんが、ガベージコレクションを扱うことはできますか?
もう一つの例:
class B(object):
def __init__(self):
self.msg = 'Some default message'
print id(self)
def do_smth(self, msg):
self.msg = msg
def get_msg(self):
return self.msg
はその後、我々は2例があります。
第一:
B().do_smth(B().get_msg() + ' add')
第二
b = B()
b.do_smth(b.get_msg() + ' add')
私の知る限り、我々は最初のもののように2つのインスタンスを作成しないため、2番目のアプローチは、はるかに望ましい理解し
。しかし、私たちが第1のアプローチを満たすことができる興味深いケースはありますか? id
機能用のPython documentationから