Python 类可以接受参数吗?
我有一个这样的类
class MetricLst(object):
def __init__(self,n):
self.min = min(n)
self.max = max(n)
lst = [1,2,3,4,5]
p = MetricLst(lst)
print p.max
5
print p.min
1
它有一个参数
class MetricArg(object):
def __init__(self,*args):
self.min = min(args)
self.max = max(args)
p = MetricArg(1,2,3,4,5)
p.max
print 5
p.min
print 1
我有以下几个问题:
- 如果我使用 MetricArg,有没有简单的方法通过一个列表来创建这个对象?
- 在创建一个类的时候,我是否应该优先使用 *args(如果可以的话)?
2 个回答
1
你可以把一个列表传给一个可变参数的函数或者构造函数。
L = [1, 2, 3, 4, 5]
p = MetricArg(*L)
到底是用可变参数的函数好,还是用一个接受列表的函数好,这其实要看具体的函数。
这个函数或构造函数是不是经常会用到动态生成的列表,还是大多数情况下只会接收固定数量的参数呢?
如果列表大多数情况下是动态生成的,那么接受一个列表是最好的选择,因为这样可以让代码更简洁,不用到处写 *L
。反之,如果在大多数情况下,调用者传的参数数量是固定且不多,那么直接传参数会比为了传参数而构建一个列表更容易理解。
3
*args*
这种写法有一个对应的调用方式:p = MetricArg(*somelist)
somelist
里的元素会被当作参数传给MetricArg
。这要看你想要提供什么样的接口。如果你希望接受0个或多个参数,因为这样调用你的类会更方便,那就用这种形式。
在Python的接口中,
print()
和os.path.join()
函数就是使用可变长度参数列表的著名例子。