Python中的多个构造函数
我有一个类A,可以通过两种不同的方式来创建。
- a = A(路径到xml文件)
- a = A(列表A, 列表B)
第一种方法是通过一个文件路径作为输入,从XML文件中解析出列表A和列表B。第二种方法则是直接给出两个列表。
我想到两种实现多个构造方法的方式。你觉得怎么样?通常Python程序员在这种情况下会用什么方法呢?
检查类型
class A():
def __init__(self, arg1, arg2 = None):
if isinstance(arg1, str):
...
elif isinstance(arg1, list):
...
a = A("abc")
b = A([1,2,3],[4,5,6])
制作不同的构建器
class A2():
def __init__(self):
pass
def genFromPath(self, path):
...
def genFromList(self, list1, list2):
...
a = A2()
a.genFromPath("abc")
b = A2()
b.genFromList([1,2,3],[4,5,6])
5 个回答
3
因为每次传给初始化器的参数数量都不一样,所以你可以通过使用扩展调用语法来避免类型检查:
class A(object):
def __init__(self, *args):
if len(args) == 1:
path = args[0]
...
elif len(args) == 2:
list1 = args[0]
list2 = args[1]
...
else:
raise SomeException()
3
对于第二种情况,使用 classmethod
。
class A(object):
@classmethod
def from_string(cls, string):
# ...
@classmethod
def from_lists(cls, list1, list2):
# ...
使用模块里的函数。
def from_string(string):
# ...
def from_lists(list1, list2):
# ...
class A(object):
pass
7
让构造函数接收这两个列表。写一个工厂类方法,用来解析XML并返回对象。