2013-02-24 2 views
1

나는 다음과 같은 클래스를 가지고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 

나는 다음과 같은 질문이 있습니다

  1. 내가 MetricArg를 사용하는 경우, 객체를 생성하는 우아한 방법이를 목록 사용?
  2. 내가 클래스를 만들면 * args가 필요합니까 (내가 할 수있는 경우)? somelist

    p = MetricArg(*somelist) 
    

    요소가 MetricArg 인수로 사용한다 :

+1

FYI :'*'는 _splat_ 연산자라고합니다. – aviraldg

+0

감사합니다 aviraldg. –

+1

@aviraldg - 나는 이것을 * splat *이라고 부르는 것을 좋아하지만, 일반적으로 풀기 연산자라고도합니다. – mgilson

답변

3
  1. *args* 구문 미러 호출 당량을 갖는다.

  2. 어떤 종류의 API를 제공 하시겠습니까에 따라 다릅니다. 0 개 이상의 인수를 허용하려면 클래스를 가장 편리하게 호출하는 방법이 필요하므로 해당 형식을 사용합니다.

    Python API에서 print()os.path.join() 함수는 임의 길이 매개 변수 목록을 사용하는 호출 가능 함수의 잘 알려진 예입니다. 정말 기능에 따라 목록을 받아들이는 기능을 대신 가변 기능을 사용할지 여부

1

당신은 가변 기능 또는 생성자

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

에 목록을 전달할 수 있습니다.

동적으로 생성 된 목록에서 함수/생성자를 자주 호출합니까? 아니면 대부분 고정 된 수의 매개 변수를 받습니까?

목록이 대부분 동적 인 경우 목록을 허용하는 것이 좋습니다. 코드를 *L으로 복잡하게 만들지 않으므로 좋습니다. 반면에 대부분의 경우 인수의 개수가 호출자에서 고정되어 작은 인수를 전달하는 것만으로 전달할 수있는 목록을 작성하는 것보다 읽기 쉽습니다.

관련 문제