メソッドをクラスに追加する関数を作成するにはどうすればよいですか?私は持っています:Pythonメタプログラミング:メンバー関数を自動的に生成する
class A:
def method(self):
def add_member(name):
self.new_method = def name...?
add_member("f1")
add_member("f2")
私がしようとしていることに答えるためです。私はいくつかのpyqtスロットを除外しようとしています。私は、QSlider
とQLabel
を作成し、スライダ処理コードを作成し、sliderハンドラがQLabel
のテキストを更新するように、関数create_slider
を呼び出せます。ここで因数分解する必要があるスロットがあります:
def on_sample_slider(self, value):
self.samples = pow(4, value)
self.sample_label.setText('%d' % self.samples)
ここにいくつかのUIを生成する方法だが、また、on_sample_slider方法にそれが呼び出されるたびに発生しているといいだろう。
def insert_labeled_slider(hbox, name, slider_target):
# name
hbox.addWidget(QLabel(name))
# label
label = QLabel()
label.setMinimumSize(40, 0)
hbox.addWidget(self.sample_label)
#slider
slider = QSlider(Qt.Horizontal)
slider.setRange(0, 6)
slider.setTracking(True)
slider.setPageStep(1)
hbox.addWidget(slider)
self.connect(self.sample_slider, SIGNAL('valueChanged(int)'),
self.on_sample_slider)
self.sample_slider.setValue(0)
return (label, slider)
最終コード:
def attach_on_slider(obj, name, variable, label, base):
def on_slider(self, value):
variable = base**value
label.setText('%d' % variable)
# This next line creates a method from the function
# The first arg is the function and the second arg is the object
# upon which you want it to be a method.
method = types.MethodType(on_slider, obj)
obj.__dict__["on_slider_" + name] = method
return method
class A:
def insert_labeled_slider(hbox, name, label_name, variable):
# name
hbox.addWidget(QLabel(label_name))
# label
label = QLabel()
label.setMinimumSize(40, 0)
hbox.addWidget(label)
#slider
slider = QSlider(Qt.Horizontal)
slider.setRange(0, 6)
slider.setTracking(True)
slider.setPageStep(1)
hbox.addWidget(slider)
on_slider_method = attach_on_slider(self, name, variable, label, 4)
self.connect(slider, SIGNAL('valueChanged(int)'),
on_slider_method)
slider.setValue(0)
return (label, slider)
メソッドf1とf2は既にどこかで定義されていますか? – BudgieInWA
いいえ、私はヘルパー関数内でそれらを生成しようとしています。 –
(私はいくつかの同じメンバ関数を除外しようとしています。) –