class A:
__init__():
self.a.b.c = 10
anotherMethod():
self.a.b.c = self.a.b.c * 10
class A:
__init__():
self.a.b.c = 10
alias self.aliased = self.a.b.c # Creates an alias
anotherMethod():
self.aliased = self.aliased * 10 # Updates value of self.a.b.c
Pythonでエイリアシングをどのように達成しますか?私がやりたい理由は、長い変数名による混乱を減らすためです。 マルチスレッド環境です。したがって、ローカル変数にコピーするだけでは機能しません。
これに対する解決策は、getterメソッドとsetterメソッドを使用することです-幸いなことにPythonには property()
組み込み があり、これの醜さを隠します。
class A:
def __init__():
self.a.b.c = 10
@property
def aliased(self):
return self.a.b.c
@aliased.setter
def aliased(self, value):
self.a.b.c = value
def anotherMethod():
self.aliased *= 10 # Updates value of self.a.b.c
他の人が指摘しているように、一般的にこれは悪い設計の兆候です-通常、クラスが3つの関係から離れているオブジェクトについて知る必要はありません-これは、特定のアイテムへの変更がコードベース全体で問題を引き起こす可能性があることを意味します。各クラスが周囲のクラスを処理するようにして、それ以上は行わないことをお勧めします。
あなたは混乱しています。 Pythonは暗黙的に何もコピーせず、参照のみを保存するため、どの環境にいても機能します。
# this creates a list and stores a *reference* to it:
really_really_long_variable_name = []
# this creates another new reference to the *same list*. There's no copy.
alias = really_really_long_variable_name
alias.append('AIB')
print really_really_long_variable_name
['AIB']
を取得します