在Python中强制使用函数参数类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中强制使用函数参数类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3797字,纯文字阅读大概需要6分钟。
内容图文
![在Python中强制使用函数参数类型?](/upload/InfoBanner/zyjiaocheng/706/9e8c2d2cc5f346a894f293ec965e4013.jpg)
我在Python类中有一个函数,它将接口添加到列表中.
def RegisterAsListener(self, inListener):
self.__TransitListeners.append(inListener)
这很好,因为一个类只需要从我的接口继承,抓住这个对象,并为所有更新注册自己.
class ITransit():
def TransitUpdate(self, data):
raise NotImplementedError("You must define this function.")
(假设我正确地创建了一个接口)
由于我不是这个项目中唯一的一个,我不希望有人用不正确的数据类型调用RegisterAsListener函数.我可以输入代码来检查寄存器函数中的类型,但如果编译器在尝试推送不正确的数据类型时只是对程序员大吼大叫,那么它会更容易.
def RegisterAsListener(self, IListener inListener):
self.__TransitListeners.append(inListener)
有没有办法做到这一点?
解决方法:
虽然我强烈建议不要这样做,并且只使用抽象基类(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中强制使用函数参数类型?全部内容,希望文章能够帮你解决在Python中强制使用函数参数类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。