python中原始类型的多态分派?

时间:2018-06-14 18:19:21

标签: python python-3.x

在perl中,我通常会像这样实现多态输入:

sub inputanything {
   return undef unless (length($_[0])) ;
   return(&handlehash(@_)) if (ref($_[0]) eq 'HASH');
   return(&handlearray(@_)) if (ref($_[0]) eq 'ARRAY');
   return(&handlescalar(@_)) if (ref($_[0]) eq 'SCALAR');
   return(&handleobject(@_)) if (ref($_[0]) eq 'Foo') ;
   return undef ; 
} 

大概说:“传递的值必须具有长度而不管类型,根据检测到的类型运行相应的类型处理程序,如果没有传递任何内容或者如果我们传递的是我们无法识别的类型,则不返回任何内容。”

我正在尝试在python对象中执行类似的操作,可以接收None,string,integer,float和decimal类型。是否有一种python方法可以普遍检测未知类型值中任何数据的存在?如果没有,是否有一种基于python中基本类型的调度方法,你能引用我的例子吗?

python 3.5.3 提前谢谢!

1 个答案:

答案 0 :(得分:0)

它在python中更简单。

  

"传递的值必须具有长度而不管类型,根据检测到的类型运行相应的类型处理程序,如果我们没有传递任何东西或者如果我们传递的是我们不认识的类型,则不返回任何内容。 "

如果我理解正确你想要识别"无论类型":空字符串,数组,哈希映射,一切。

你已经可以做到:

if your_variable:
    .. code for non-empty data

它几乎适用于所有内置和库定义的类型。

它如何运作以及如何为您的类型扩展它?

阅读https://docs.python.org/3/reference/datamodel.html#object.bool

是。就这么简单。

只需为您的类型定义__bool__方法。

(高兴!在perl之后Python是正确的选择!我自己知道)