【问题标题】:python polymorphism with Tkinter [duplicate]Tkinter的python多态性[重复]
【发布时间】:2014-01-12 01:09:24
【问题描述】:

我是 OOP 编程的新手,我正在尝试理解 Python 中的多态性,我在网上找到的所有教程似乎都很模糊,比如这个:How does polymorphism work in Python?,它帮助我理解了多态性的概念,但是然后我如何将其应用于 Tkinter 或其他模块。 有人可以给出一些 Tkinter 中多态性的好例子,并清楚地解释 cmets。

-谢谢

【问题讨论】:

    标签: python python-2.7 tkinter polymorphism


    【解决方案1】:

    多态是 CS 中的一个多态概念。说到OO,主要指的是“基于多态类型的调度”,意思是在运行时会根据对象的类型来选择方法的具体实现/属性的解析。举个例子:

    class Foo(object):
        def do_this(self):
            return 42
    
    class Bar(object):
        def do_this(self):
            return 84
    
    def whatever(*objects):
        for obj in objects:
            print obj.do_this()
    
    objects = [Foo(), Bar()]
    whatever(*objects)
    

    关键是我现在可以创建一个新类:

    class Baaz(object):
        def do_this(self):
            return -1
    

    并将其传递给whatever(),而无需修改whatever()

    whatever(Baaz())
    

    whatever() 可用于任何具有do_this(self) 方法的对象,并且do_this() 的正确实现是通过查找对象本身自动选择的。

    将此与纯过程代码进行比较:

    def foo_do_this(foo):
        return 42
    
    def bar_do_this(bar):
        return 84
    
    def whatever(*objects):
        for obj in objects:
            if obj.__class__.__name__ ==  "Foo":
                print foo_do_this(obj)
            elif obj.__class__.__name__ ==  "Bar":    
                print bar_do_this(bar)
            else:
                 print "dont know how to handle '%s', sorry" % (obj.__class__.__name__)
    

    这要求我编辑 whatever() 以适应 xxx_do_this() 的任何新实现。

    不,这不是“Tkinter 中的多态性的好例子,因为我从不使用 Tkinter - 但如果你理解上面的例子,你应该能够发现相当多的例子Tkinter 以及几乎所有 Python 模块或包中的多态性。

    【讨论】:

    • 多态性的好例子在Tkinter
    • 参考我的最后一段。
    • 对于初学者来说,tkinter 比典型的类继承示例要复杂一些,因为它需要创建一个 Tk 顶级小部件、一个应用程序主循环和其他特定于 GUI 框架的东西。
    • 请注意,我的示例中不涉及继承...
    • 哦,对了(虽然你的类继承自对象),我指的是一般意义上的 OOP 的典型示例
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多