Python 类可以接受参数吗?

1 投票
2 回答
3011 浏览
提问于 2025-04-17 16:58

我有一个这样的类

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 个回答

1

你可以把一个列表传给一个可变参数的函数或者构造函数。

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

到底是用可变参数的函数好,还是用一个接受列表的函数好,这其实要看具体的函数。

这个函数或构造函数是不是经常会用到动态生成的列表,还是大多数情况下只会接收固定数量的参数呢?

如果列表大多数情况下是动态生成的,那么接受一个列表是最好的选择,因为这样可以让代码更简洁,不用到处写 *L。反之,如果在大多数情况下,调用者传的参数数量是固定且不多,那么直接传参数会比为了传参数而构建一个列表更容易理解。

3
  1. *args* 这种写法有一个对应的调用方式:

    p = MetricArg(*somelist)
    

    somelist 里的元素会被当作参数传给 MetricArg

  2. 这要看你想要提供什么样的接口。如果你希望接受0个或多个参数,因为这样调用你的类会更方便,那就用这种形式。

    在Python的接口中,print()os.path.join() 函数就是使用可变长度参数列表的著名例子。

撰写回答