【发布时间】:2014-10-30 20:43:57
【问题描述】:
问题是,我有一个类,我想在 python 中定义一个类,以便能够在调用主类的函数时将责任转嫁给另一个类。 例如:
class Multi_Interface:
def __init__(self):
interfaces = [Interface("message A"), Interface("Message B")]
self.set_interface(0)
def set_interface(self, interface_index = 0):
current_interface = self.interfaces[interface_index]
# @todo: override the .operator to call the member of the current interface.
class Interface:
def __init__(self, message):
self.msg = message
def do_stuff(self, message="I am a parameter"):
print message + self.msg
mi = Multi_Interface()
mi.do_stuff(message="the internal message is: ")
mi.set_interface(1)
mi.do_stuff(message="the internal message is: ")
mi.do_stuff()
>>> the internal message is: mesage A
>>> the internal message is: mesage B
>>> I am a parameter: mesage B
有没有办法为一个类重载这个运算符? 如何重载这个运算符? 我对如何从子对象获取方法有一个想法,前提是我可以在方法中获取字符串。
【问题讨论】:
-
我认为你想继承。尝试像这样开始您的 Multi_Interface 类:
class Multi_Interface(Interface)这样 Multi_Interface 将继承接口中定义的所有方法,只要您以与接口相同的方式构造它...您的代码中还有其他错误,比如self.interfaces不存在。 -
该解决方案的问题在于,我正在处理的接口并不总是从接口类派生的具体类,并且会有很多方法。因此,我希望接听调用并尝试将其传递给接口,而不必显式覆盖具体接口类中的每个方法。
-
我个人看不到没有子类化的方法(也许让
Interface成为一个超级最低限度的类)......如果你仍然坚持重载.然后根据stackoverflow.com/questions/1936135/… 它有可能…… -
大多数时候,对于此类问题,有更好的、不那么神奇的解决方案。你能问得更具体点吗?
-
我正在寻找在使用“。”之后在类中查找成员时调用的特殊方法。如“instance.method_name(parameters)”;我正在寻找这种方法,以便我当然可以覆盖它。我怀疑它可能是下一页上的 attrgetter 方法,但我不确定这是否是我需要覆盖的方法。 docs.python.org/2/library/operator.html
标签: python operator-overloading overriding overloading