如何根据参数类型重载__init__方法?
本文翻译自: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__方法?相关推荐
- C#中提示:可访问性不一致:参数类型XXX比方法XXX的可访问性低
场景 在Winforn窗体应用中运行时提示: 在Button按钮的点击事件中: private void button1_Click(object sender, EventArgs e){this. ...
- JAVA一种获得泛型类泛型参数Class对象的方法
我在最近的开发中遇到这样一种情形,就是有一个类需要使用泛型进行实现,但是又同时需要用到泛型的Class对象.然而由于Java泛型擦除没办法直接得到泛型参数的Class对象.本已打算放弃,但是在编写其它 ...
- java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解
1.1 方法重载的概述和特点 方法重载概述 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可. 方法重载特点 与返回值类型无关,只看方法名和参数列表 在调用时,虚拟机通 ...
- c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_一个使用延迟候选项生成的用于自动化程序修复方法的工具...
论文:Jinru Hua, Mengshi Zhang, Kaiyuan Wang, and Sarfraz Khurshid. 2018. SketchFix: A Tool for Automat ...
- Java方法重载时参数类型有重合,它会选择执行哪一个?
本文出处:http://blog.csdn.net/chaijunkun/article/details/7660178,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...
- java 方法名相同_Java的方法的重载 :方法名相同,参数类型不同 - Break易站
人类设计语言时,相同的词汇可以表达多种意思.而在Java里面,方法也被设计成这个模式,而区分这些相同方法名的就是方法的参数. Java的方法的重载的特点 方法的重载有下面的特点: 1. 方法名相同,参 ...
- 重载练习1_四种不同参数类型的方法
package cn.learn.day04.demo04;/* 题目要求: 比较两个数据是否相等. 参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型, 并在mai ...
- java 重载 : 1.参数个数不同,2.参数类型不同
参数个数相同时,参数类型需要不同,即使是不同变量名也不行.和是和变量的个数或者是变量的类型有关系 如果相同的话是覆盖 会报错 重载(overloading) 是在一个类里面,方法名字相同,而参数不同 ...
- c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇...
作者:HelloGitHub-Prodesire 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 一.前言 在上一篇文章中,我们初步掌握了 click 的简单用法,并了解到它 ...
最新文章
- 第四组视频:在bash脚本中使用脚本选项
- [javascript] 看知乎学习js闭包
- 函数调用oracle,oracle 函数调用
- 文本编辑器实现打开文件、保存文件、文件另存为、新建文件、软件关闭的功能
- 1.httpClient和ScrollView
- 飞机大战-控制玩家飞机左右移动
- MFC绘图的几种方法
- Notebook响应式扁平化后台UI框架模板
- erp核心目的及erp特点
- Angr安装与使用之使用篇(十)
- 面试的准备——公子禹
- 《学习网站》计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- 为什么定积分可以求面积?
- WRF运行wrf.exe出现forrtl: severe (174): SIGSEGV, segmentation fault occurred问题原因与解决合集
- 转专业的程序员,泪眼回首头三年
- Huffman Coding 哈夫曼树
- [NOIP2005提高组]过河
- ES6箭头函数以及promise/async/await测试案例
- 三、T100应付管理之采购应付-入库应付管理篇
- 纬地道路纵断面设计教程_市政工程这样设计!案例视频教程+CAD图纸收好,市政全覆盖...