我的问题是双重的。
首先,我想定义一个类,它有一个方法scale
,该方法的行为取决于分配给它的一个属性的值。
下面是我当前尝试的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
属性,并在__init__
中相应地定义scale
方法。目前,我在第二部分看到的唯一解决方案是在类的核心和__init__
部分中定义每个缩放方法,这看起来相当尴尬。你知道吗
编辑:我刚刚注意到this answer可能在这里被改编。你知道吗
如前所述,不清楚您是希望在类基础上还是在实例基础上执行。 下面是一个基于实例的解决方案。我用比例尺法:
如果您想在类的基础上使用它,请将
self.scale = ...
替换为self.__class__.scale = ...
。注意:这可能被认为是黑客行为 因为我真的在改变课程。你知道吗那么
请注意,该类的其他对象不受影响:
如果希望在类的基础上具有相同的行为:
然后像前面的代码一样:
但现在
cc
也受到了影响:这是我从this answer得到的一个解。
print
语句可以替换为正确的错误处理。你知道吗相关问题 更多 >
编程相关推荐