class foo():
def __init__(self)
self.var1 = 1
class bar():
def __init__(self):
print "foo var1"
f = foo()
b = bar()
Fooで、「var1」を1に設定する何かをしています。barで、var1の内容にアクセスしたいと思います。
Barのインスタンスb内からfooのクラスインスタンスfのvar1にアクセスするにはどうすればよいですか?
基本的に、これらのクラスは異なるwxframeです。したがって、たとえば1つのウィンドウでユーザーが入力データを入力している場合、2番目のウィンドウではその入力データを使用して出力を生成します。 C++では、呼び出し元へのポインターがありますが、Pythonで呼び出し元にアクセスする方法がわかりません。
WxPythonのさまざまなページが同じ情報にアクセスして編集する一般的な方法として、MainFrame(またはそれを呼び出したもの)クラスにinfoクラスのインスタンスを作成し、そのインスタンスを作成した他のページに渡すことを検討してください。例えば:
class info():
def __init__(self):
self.info1 = 1
self.info2 = 'time'
print 'initialised'
class MainFrame():
def __init__(self):
a=info()
print a.info1
b=page1(a)
c=page2(a)
print a.info1
class page1():
def __init__(self, information):
self.info=information
self.info.info1=3
class page2():
def __init__(self, information):
self.info=information
print self.info.info1
t=MainFrame()
出力は次のとおりです。
initialised
1
3
3
infoは、インスタンスが1つしかないことを証明した後でのみ初期化されますが、page1はinfo1変数を3に変更し、page2はその変更を登録しました。
Init引数を変更せずにこれを行う方法を示すコード例を提供した人は誰もいません。 2つのクラスを定義する外部スコープの変数を使用するだけで済みます。ただし、一方のクラスがもう一方のクラスとは別のソースファイルで定義されている場合、これは機能しません。
var1 = None
class foo():
def __init__(self)
self.var1 = var1 = 1
class bar():
def __init__(self):
print var1
f = foo()
b = bar()
他の言語と同じです。
class Foo(object):
def __init__(self):
self.x = 42
class Bar(object):
def __init__(self, foo):
print foo.x
a = Foo()
b = Bar(a)
あるいは、両方の派生クラスがクラス変数var1
を継承する共通の基本クラスを持つこともできます。このようにして、派生クラスのすべてのインスタンスが変数にアクセスできます。
何かのようなもの:
class foo():
def __init__(self)
self.var1 = 1
class bar():
def __init__(self, foo):
print foo.var1
f = foo()
b = bar(foo)
C++でポインタを渡すのと同じように、Pythonでオブジェクトを渡すことができるはずです。
おそらく、この質問がされたので、これは言語に追加されました...
Globalキーワードが役立ちます。
x = 5
class Foo():
def foo_func(self):
global x # try commenting this out. that would mean foo_func()
# is creating its own x variable and assigning it a
# value of 3 instead of changing the value of global x
x = 3
class Bar():
def bar_func(self):
print(x)
def run():
bar = Bar() # create instance of Bar and call its
bar.bar_func() # function that will print the current value of x
foo = Foo() # init Foo class and call its function
foo.foo_func() # which will add 3 to the global x variable
bar.bar_func() # call Bar's function again confirming the global
# x variable was changed
if __name__ == '__main__':
run()