本文翻译自:How to overload __init__ method based on argument type?

Let's say I have a class that has a member called data which is a list. 假设我有一个类,该类具有一个名为data的成员,该成员是一个列表。

I want to be able to initialize the class with, for example, a filename (which contains data to initialize the list) or with an actual list. 我希望能够使用例如文件名(包含用于初始化列表的数据)或实际列表进行初始化的类。

What's your technique for doing this? 您执行此操作的技巧是什么?

Do you just check the type by looking at __class__ ? 您是否只是通过查看__class__检查类型?

Is there some trick I might be missing? 我可能会缺少一些技巧吗?

I'm used to C++ where overloading by argument type is easy. 我习惯C ++,按参数类型重载很容易。


#1楼

参考:https://stackoom.com/question/aoz/如何根据参数类型重载-init-方法


#2楼

Quick and dirty fix 快速而肮脏的修复

class MyData:def __init__(string=None,list=None):if string is not None:#do stuffelif list is not None:#do other stuffelse:#make data empty

Then you can call it with 然后你可以用

MyData(astring)
MyData(None, alist)
MyData()

#3楼

A better way would be to use isinstance and type conversion. 更好的方法是使用isinstance和类型转换。 If I'm understanding you right, you want this: 如果我对您的理解正确,那么您需要这样做:

def __init__ (self, filename):if isinstance (filename, basestring):# filename is a stringelse:# try to convert to a listself.path = list (filename)

#4楼

您可能需要isinstance内置函数:

self.data = data if isinstance(data, list) else self.parse(data)

#5楼

You should use isinstance 您应该使用isinstance

isinstance(...)isinstance(object, class-or-type-or-tuple) -> boolReturn whether an object is an instance of a class or of a subclass thereof.With a type as second argument, return whether that is the object's type.The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut forisinstance(x, A) or isinstance(x, B) or ... (etc.).

#6楼

OK, great. 好,很好。 I just tossed together this example with a tuple, not a filename, but that's easy. 我只是将这个示例与一个元组(而不是文件名)联系在一起,但这很容易。 Thanks all. 谢谢大家

class MyData:def __init__(self, data):self.myList = []if isinstance(data, tuple):for i in data:self.myList.append(i)else:self.myList = datadef GetData(self):print self.myList

a = [1,2] a = [1,2]

b = (2,3) b =(2,3)

c = MyData(a) c = MyData(a)

d = MyData(b) d = MyData(b)

c.GetData() c.GetData()

d.GetData() d.GetData()

[1, 2] [1,2]

[2, 3] [2,3]

如何根据参数类型重载__init__方法?相关推荐

  1. C#中提示:可访问性不一致:参数类型XXX比方法XXX的可访问性低

    场景 在Winforn窗体应用中运行时提示: 在Button按钮的点击事件中: private void button1_Click(object sender, EventArgs e){this. ...

  2. JAVA一种获得泛型类泛型参数Class对象的方法

    我在最近的开发中遇到这样一种情形,就是有一个类需要使用泛型进行实现,但是又同时需要用到泛型的Class对象.然而由于Java泛型擦除没办法直接得到泛型参数的Class对象.本已打算放弃,但是在编写其它 ...

  3. java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解

    1.1 方法重载的概述和特点 方法重载概述 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可. 方法重载特点 与返回值类型无关,只看方法名和参数列表 在调用时,虚拟机通 ...

  4. c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_一个使用延迟候选项生成的用于自动化程序修复方法的工具...

    论文:Jinru Hua, Mengshi Zhang, Kaiyuan Wang, and Sarfraz Khurshid. 2018. SketchFix: A Tool for Automat ...

  5. Java方法重载时参数类型有重合,它会选择执行哪一个?

    本文出处:http://blog.csdn.net/chaijunkun/article/details/7660178,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  6. java 方法名相同_Java的方法的重载 :方法名相同,参数类型不同 - Break易站

    人类设计语言时,相同的词汇可以表达多种意思.而在Java里面,方法也被设计成这个模式,而区分这些相同方法名的就是方法的参数. Java的方法的重载的特点 方法的重载有下面的特点: 1. 方法名相同,参 ...

  7. 重载练习1_四种不同参数类型的方法

    package cn.learn.day04.demo04;/* 题目要求: 比较两个数据是否相等. 参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型, 并在mai ...

  8. java 重载 : 1.参数个数不同,2.参数类型不同

    参数个数相同时,参数类型需要不同,即使是不同变量名也不行.和是和变量的个数或者是变量的类型有关系  如果相同的话是覆盖 会报错 重载(overloading) 是在一个类里面,方法名字相同,而参数不同 ...

  9. c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇...

    作者:HelloGitHub-Prodesire 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 一.前言 在上一篇文章中,我们初步掌握了 click 的简单用法,并了解到它 ...

最新文章

  1. 第四组视频:在bash脚本中使用脚本选项
  2. [javascript] 看知乎学习js闭包
  3. 函数调用oracle,oracle 函数调用
  4. 文本编辑器实现打开文件、保存文件、文件另存为、新建文件、软件关闭的功能
  5. 1.httpClient和ScrollView
  6. 飞机大战-控制玩家飞机左右移动
  7. MFC绘图的几种方法
  8. Notebook响应式扁平化后台UI框架模板
  9. erp核心目的及erp特点
  10. Angr安装与使用之使用篇(十)
  11. 面试的准备——公子禹
  12. 《学习网站》计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
  13. 为什么定积分可以求面积?
  14. WRF运行wrf.exe出现forrtl: severe (174): SIGSEGV, segmentation fault occurred问题原因与解决合集
  15. 转专业的程序员,泪眼回首头三年
  16. Huffman Coding 哈夫曼树
  17. [NOIP2005提高组]过河
  18. ES6箭头函数以及promise/async/await测试案例
  19. 三、T100应付管理之采购应付-入库应付管理篇
  20. 纬地道路纵断面设计教程_市政工程这样设计!案例视频教程+CAD图纸收好,市政全覆盖...

热门文章

  1. linux系统组成以及运行模式
  2. CentOS中zip压缩和unzip解压缩命令详解
  3. 二维凸包(模板) hdu 1348 求凸包的周长
  4. (面试题)html中创建模态窗口的方法有哪些?
  5. .NET程序的代码混淆、加壳与脱壳
  6. 如何在本机使用正式版的SAP Business One的Common库的Lisence服务
  7. Nginx 配置学习
  8. 为啥选择python
  9. 【1】Zookeeper概述
  10. 子元素margin-top为何会影响父元素?