Python Can类可以接受参数吗?

时间:2013-02-24 21:20:05

标签: python class optimization arguments code-structure

我有以下课程

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

我有以下问题:

  1. 如果我使用MetricArg,是否有一种优雅的方式来创建对象 使用清单?
  2. 当我创建一个类(如果可以的话)时,我是否需要更喜欢* args?

2 个答案:

答案 0 :(得分:3)

  1. *args*语法具有等效的镜像调用:

    p = MetricArg(*somelist)
    

    somelist的元素将用作MetricArg的参数。

  2. 这取决于您要呈现的API类型。如果你想接受0个或更多的参数,因为你最希望你方便地调用你的类,那么你就可以使用那个形式了。

    在Python API中,print()os.path.join()函数是众所周知的使用任意长度参数列表的callables示例。

答案 1 :(得分:1)

您可以将列表传递给可变参数函数或构造函数

L = [1, 2, 3, 4, 5]
p = MetricArg(*L)

是否使用可变参数函数而不是接受列表的函数实际上取决于函数。

是否经常使用动态构造的列表调用函数/构造函数,还是主要接收固定数量的参数?

如果列表主要是动态的,那么接受列表是最好的主意,因为你不会用*L混乱代码。另一方面,如果在大多数情况下,参数的数量在调用者中是固定的,那么只需传递参数比构建列表只是为了传递它更具可读性。