残念ながら、よくわかりませんがC++
、次のようなものが必要だと思います。
class A:
def __init__(self):
self.test = ''
self.func("test")
print(self.test)
def func(self,var):
setattr(self,var,'foo')
関数内で変更(変更)できるため(self.test
変更可能である場合)、この方法で行う必要がありますが、参照するオブジェクト(割り当てで実行しようとしているオブジェクト)を変更することはできません。検討:
def func1(x):
x.append('foo')
def func2(x):
x = 'foo'
a = []
func1(a)
print a #['foo'] #mutated a in func1
func2(a)
print a #['foo'] #didn't change a in func2, only created a new local variable named `x` and assigned it to the string 'foo'
これを回避する唯一の方法は、変更可能なプロキシのようなオブジェクトを渡すことです。この場合、インスタンスをプロキシオブジェクト(self
)および属性の名前(var
)として渡すため、で何を変更するかがわかりself
ます。これらの2つの情報があれば、必要な変更を加えることができます。もちろん、この時点では、func
すべてをまとめてsetattr
直接使用するのがおそらく最善の方法です。
なぜ実際にこれをやりたいのかを尋ねる価値もあるでしょう。一般的に、あなたはただすることができます:
self.test = "foo"
なぜあなたは書きたいのですか:
self.func(self.test)
代わりは?あなたはプライベートメソッドと属性を持っていることに慣れているので、あなたがそれをやろうとしているのかどうかは理解できます。しかし、これはpythonです。 「私たちは皆、ここで大人に同意しています。」 規則に依存するだけです(変数を_
変更しないようにユーザーに警告する場合は変数の前に付け__
、スーパークラスでの衝突を避けるために名前マングリングを呼び出すために前に付けます)。