您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中处理不同类型的规范方法是什么?

5b51 2022/1/14 8:22:21 python 字数 3373 阅读 533 来源 www.jb51.cc/python

我有一个函数,我需要为我调用的另一个程序生成不同的输出字符串,具体取决于它想要的类型. 基本上,被调用的程序需要一个命令行参数来告诉它调用它的类型. 幸运的是我在SO上找到了this answer如何检查变量的类型.但我注意到人们也提出异议,检查类型背叛了“非面向对象”的设计.那么,还有其他一些方法,在不明确检查类型的情况下,可以采用更“面向对象”的方式处理这个问题吗? 我现在的代码是这样的: d

概述

基本上,被调用的程序需要一个命令行参数来告诉它调用它的类型.

幸运的是我在SO上找到了this answer如何检查变量的类型.但我注意到人们也提出异议,检查类型背叛了“非面向对象”的设计.那么,还有其他一些方法,在不明确检查类型的情况下,可以采用更“面向对象”的方式处理这个问题吗?

我现在的代码是这样的:

def myfunc(val):
    cmd_type = 'i'
    if instance(val,str):
        cmd_type = 's'

    cmdline = 'magicprogram ' + cmd_type + ' ' + val
    Popen(cmdline,... blah blah)
    ...

哪个工作得很好,但我只是想知道是否有一些我不知道的技术.

毫不奇怪,为了使你的工作更加面向对象,你需要在其中引入一些对象(和相应的类).使每个值成为一个类的实例将允许 – 事实上,几乎是强制 – 你停止检查它的类型.下面对示例代码修改显示了一种非常简单的方法

class Value(object):
    """ Generic container of values. """
    def __init__(self,type_,val):
        self.type = type_   # using 'type_' to avoid hiding built-in
        self.val = val

def myfunc(val):
    # Look ma,no type-checking!
    cmdline = 'magicprogram {obj.type} {obj.val}'.format(obj=val)
    print 'Popen({!r},... blah blah)'.format(cmdline)
    # ...

val1 = Value('i',42)
val2 = Value('s','foobar')

myfunc(val1)  # Popen('magicprogram i 42',... blah blah)
myfunc(val2)  # Popen('magicprogram s foobar',... blah blah)

如果Value类中有方法间接访问它的属性,那么它将更加面向对象,但只是执行上述操作就可以摆脱臭名昭着的类型检查.更面向对象的设计可能会为每种类型的Value提供不同的子类,它们共享客户端的一组通用方法,如myfunc(),用于创建,操作和从中提取信息.

使用对象的另一个好处是,如果/当您向应用程序添加对新类型“Value”的支持时,您不必修改myfunc() – 如果您对“Value”的本质的抽象是好的一,就是这样.

总结

以上是编程之家为你收集整理的在Python中处理不同类型的规范方法是什么?全部内容,希望文章能够帮你解决在Python中处理不同类型的规范方法是什么?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶