2016-10-22 4 views
0

이 지시이다__init__ 함수를 만드는 방법은 무엇입니까?

모듈 가방라는 클래스 이름 bag.py

1.Define

2.Define 하나 개의 파라미터를 갖는 INIT있어서, 가방 initalize 값의 반복 가능한 . Writing Bag()은 빈 가방을 만듭니다. Writing Bag (a ','b ','d ','c ','b ', d'))은 하나의 'a', 2 개의 'b', 하나의 'c' , 그리고 3 개의 디. 가방 클래스의 개체에만 사전이 위에서 지정한 저장해야합니다 : 그것은 저장 안/이것은 내가 가진 오류입니다 다른 자기 변수

from collections import defaultdict 
from goody import type_as_str 
from test.test_string import Bag 

class Bag: 
    def __init__(self, i): 
     if len(i) == 0: 
      self.bag = [] 
     for x in i: 
      self.bag.append(x) 




if __name__ == '__main__': 
    #driver tests 
    import driver 
    driver.default_file_name = 'bsc1.txt' 
#  driver.default_show_exception= True 
#  driver.default_show_exception_message= True 
#  driver.default_show_traceback= True 
    driver.driver() 

조작 :

7 # Test init, repr, and str 
    8 *Error: b = Bag() raised exception TypeError: __init__() missing 1 required positional argument: 'i' 
    9 *Error: repr(b) in ['Bag()','Bag([])'] raised exception NameError: name 'b' is not defined 
10 *Error: str(b) raised exception NameError: name 'b' is not defined 
11 *Error: b = Bag(['d','a','b','d','c','b','d']) raised exception AttributeError: 'Bag' object has no attribute 'bag' 
12 *Error: all((repr(b).count('\''+v+'\'')==c for v,c in dict(a=1,b=2,c=1,d=3).items())) raised exception NameError: name 'b' is not defined 
13 *Error: all((v+'['+str(c)+']' in str(b) for v,c in dict(a=1,b=2,c=1,d=3).items())) raised exception NameError: name 'b' is not defined 

입력은 다음과 같습니다

# Test init, repr, and str 
c-->b = Bag() 
e-->repr(b) in ['Bag()','Bag([])']-->True 
e-->str(b)-->Bag() 
c-->b = Bag(['d','a','b','d','c','b','d']) 
e-->all((repr(b).count('\''+v+'\'')==c for v,c in dict(a=1,b=2,c=1,d=3).items()))-->True 
e-->all((v+'['+str(c)+']' in str(b) for v,c in dict(a=1,b=2,c=1,d=3).items()))-->True 

기능을 만드는 방법을 알지 못합니다. b = Bag() 예외가 발생했습니다. TypeError : ()가 누락되었습니다. 1 개의 필수 위치 인수. 첫 번째 입력이 b = Bag()을 호출하기 때문에 항상 오류가 발생합니다. 아무도 그것을 고칠 방법을 말해 줄 수 있습니까?

답변

0

당신의 init 메소드는 인자 i가 초기화 될 것으로 기대하고 있습니다. len (i)가 0이 아니면 다른 코드 문제가 self.bag가리스트로 초기화되지 않습니다. if, bag에 추가 할 수 있습니다 if 그것의 앞에 목록으로 정의하지 않는다. 아래 코드 당신이 사용하는 경우 일이 더 간단 할 수처럼

class Bag: 
    def __init__(self, i=None): 
     self.bag = [] 
     if i == None: 
      pass # i is None, do nothing after create empty bag 
     elif type(i)==list: 
      self.bag.extend(i) # append whole list i into bag with extend method 
     else: 
      self.bag.append(i) # append single item i into bag 

# example 
Emptybag = Bag() 
Bag1 = Bag('item1') # Initialize with 1 item 
Bag2 = Bag(['item1', 'item2']) # initialize with list of items 
+0

으로 바꿀 수 있습니까? – jiahuiding

0

첫 번째 발생한 예외 :

귀하의 c-->b = Bag() 전화는 가방에 전달 된 인수를 기대하고있다. 예를 Bag(['f', 'o', 'o'])

들어 두 번째 발생한 예외 : 당신은 실제로 길이가 0보다 커야하고 가방 그래서 당신이 그것에 추가 할 수 없습니다을 만들 수 없을 것입니다 가방 생성자를 통해 인수를 전달

합니다. 나는 당신이 무엇을하려고하는지 모르지만 어쩌면 self.bag = [] 길이에 관계없이?

+0

저는 어떻게 작동시키는 지 잘 모릅니다. __init__ 함수에 매개 변수 'i'가 있으면 c -> b = Bag()은 항상 Error를 발생시킵니다. 그러나 명령은 그 매개 변수 'i'로 __init__ 함수를 생성하도록 요청했습니다. – jiahuiding

+0

죄송 합니다만, 나는 아직도 당신이 무엇을 요구하고 있는지 완전히 이해하지 못하고 있습니다. 'def __init __ (self, i) :'를'def __init __ (self, i = []) :' – atomSmasher

0

는 소리 원하는 맞아야에 내장 된 collections 모듈에 Counter 클래스. 문서에서 :

>>> c = Counter()       # a new, empty counter 
>>> c = Counter('gallahad')     # a new counter from an iterable 
>>> c = Counter({'red': 4, 'blue': 2})  # a new counter from a mapping 
>>> c = Counter(cats=4, dogs=8)    # a new counter from keyword args 
관련 문제