私の質問は 2 つあります。scale
まず、プロパティの 1 つに割り当てられた値に応じて異なる動作をする1 つのメソッドを持つクラスを定義したいと思います。以下は、XXX
何かが欠けているコード部分に署名する私の現在の試みです。
class C(object):
def __init__(self):
self._scaling_method = None
def same(self, u):
return u
def double(self, u):
return u * 2
scale = same
@property
def scaling_method(self):
return self._scaling_method
@scaling_method.setter
def scaling_method(self, value):
if value.lower() == "double":
self._scaling_method = "double"
print "Scaling method set to 'double'."
# XXX method scale should be set to double
elif value.lower() == "same":
self._scaling_method = "same"
print "Scaling method set to 'same'."
# XXX method scale should be set to same
else:
print "Unknown scaling method."
c
のインスタンスである場合、できるC
ようにしたい
c.same(3) # yields 3
c.double(3) # yields 6
c.scale(3) # yields 3 because scale defaults to same
c.scaling_method = "double"
c.scale(3) # yields 6
scaling_method
これが正しく設定されたら、引数を使用してプロパティを設定し、scale
それに応じてメソッドを定義できるようにしたいと思います__init__
。今のところ、この 2 番目の部分で私が考える唯一の解決策は、クラスのコアと__init__
セクションの両方で各スケーリング メソッドを定義することですが、これはかなりぎこちないようです。
編集:ここで適応される可能性のあるこの回答に気付きました。