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

强制在Python中使用函数参数类型?

强制在Python中使用函数参数类型?

尽管我强烈建议您不要这样做,而只能使用Abstract Base Classes(http://docs.python.org/2/library/abc.html)强制执行某些方法,但是这是可能的。

这是有关如何执行此类操作的示例:http ://www.artima.com/weblogs/viewpost.jsp?thread=101605

# mm.py
registry = {}

class MultiMethod(object):                                                      
    def __init__(self, name):                                                   
        self.name = name                                                        
        self.typemap = {}                                                       
    def __call__(self, *args):                                                  
        types = tuple(arg.__class__ for arg in args) # a generator expression!  
        function = self.typemap.get(types)                                      
        if function is None:                                                    
            raise TypeError("no match")                                         
        return function(*args)                                                  
    def register(self, types, function):                                        
        if types in self.typemap:                                               
            raise TypeError("duplicate registration")                           
        self.typemap[types] = function

def multimethod(*types):                                                        
    def register(function):                                                     
        function = getattr(function, "__lastreg__", function)                   
        name = function.__name__                                                
        mm = registry.get(name)                                                 
        if mm is None:                                                          
            mm = registry[name] = MultiMethod(name)                             
        mm.register(types, function)                                            
        mm.__lastreg__ = function                                               
        return mm                                                               
    return register

    if hasattr(function, "__lastreg__"):                                        
        function = function.__lastreg__

和使用它的代码

import mm

@mm.multimethod(int)                                                            
def spam(a):                                                                    
    print 'Calling the int method'                                              
    print '%s: %r' % (type(a), a)

@mm.multimethod(float)                                                          
def spam(a):                                                                    
    print 'Calling the float method'                                            
    print '%s: %r' % (type(a), a)

spam(5)                                                                         
spam(5.0)

输出示例:

Calling the int method
<type 'int'>: 5
Calling the float method
<type 'float'>: 5.0
python 2022/1/1 18:32:35 有216人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶