2014-04-14 2 views
-1

파이썬에 대한 제 이해는 아무에게도 무의미합니다 ...이 문제에 접근하는 데는 백 가지 다른 방법이있을 것입니다. 아래에 할당 설명과 코드를 넣습니다 ... 지금은 'getAnimal()'명령을 사용하는 데 문제가 있습니다. 나는 그것이 무엇을하는지, 그것이 어떻게 작동하는지 모른다. 미리 감사드립니다 : D총 초보자 ... 파이썬 클래스를 이해하는 데 도움이 필요합니다

과제 설명 : "클래스 '동물원'에 대한 클래스 정의를 작성하십시오. 동물 유형, herbivore/carnivore/omnivore 및 inside/outside에 대한 인스턴스 변수가 있어야하며 동물 정보를 표시하는 getAnimal() 메소드도 있어야합니다. a) 별도의 "ZooDriver"클래스 작성 a) 동물원의 세 인스턴스 작성 동물, b) 볼 동물 (1,2,3)에 대한 사용자 입력 c) getAnimal()을 사용하는 동물 정보 표시. " 내 코드 ~~~~~~~~

:

class Zoo: 
def __init__(self, animal, animal_type, habitat): 
    self.animal = animal 
    self.animal_type = animal_type 
    self.habitat = habitat 

user_input=raw_input("Enter the number 1, 2, or 3 for information on an animal.") 

if user_input == "1": 
    my_animal = Zoo("Giraffe", "herbivore", "outside") 
elif user_input == "2": 
    my_animal = Zoo("Lion", "carnivore", "inside") 
elif user_input == "3": 
    my_animal = Zoo("Bear", "omnivore", "inside") 

print "Your animal is a %s, it is a %s, and has an %s habitat." % (my_animal.animal,  my_animal.animal_type, my_animal.habitat) 
+3

이 사이트에서 성공을 거둘 수있는 가장 좋은 방법은 올바른 형식의 질문으로 시작하는 것입니다. 완전한 초보자이기 때문에 우리는 더 많은 경험이 풍부한 프로그래머와 함께 할 수있는 코드에 대해 어떠한 가정도 할 수 없습니다. 코드가 텍스트 편집기에서와 똑같이 나타나는지 확인하십시오. –

+1

이 질문과 관련하여 강사와 약속을 잡아야합니다. – motoku

+2

당신이 질문하는 방식은 물론 스타일의 답을 밝힐 것입니다. _ "알아 내고, 당신을 위해 숙제를하지 않습니다."_. 귀하의 질문은 _sad 이야기로 구성되어 있습니다.이 이야기는 질문과는 무관합니다 ._ 내 숙제를하십시오 ._ 너는 네가 갇혀있는 곳을 우리에게 알려주 려하지 않았다. – Carsten

답변

2

클래스는 일의 유형을 정의합니다. 인스턴스는 하나의 유형입니다. 예를 들어, Building이 일종의 것이라고 말할 수 있습니다.

b1 = Building() 
b2 = Building() 
b3 = Building() 
: - 예를 - 우리가 함수이었다 거의 같이 호출 지금

class Building(): 
    pass 

실제 건물을 만들 :

의이 Building라는 이름의 클래스로 시작하자

우리는 방금 세 개의 건물을 만들었습니다. 그것들은 동일하지만 매우 유용하지는 않습니다. 어쩌면 우리가 그것을 만들 때 이름을주고 인스턴스 변수에 저장할 수 있습니다. 이를 위해서는 인수를 취하는 생성자 생성이 필요합니다. 우리가 "드라이버를 만들려면

b1 = Building("firehouse") 
b2 = Building("hospital") 
b3 = Building("church") 

:

class Building(): 
    def __init__(self, name): 
     self.name = name 

이제 우리는 세 가지 다른 건물을 만들 수 있습니다 우리의 생성자는 두 개의 인수를 취할 것입니다, 그래서 모든 클래스 메소드는 또한 자사의 첫 번째 인수로 self를 취해야합니다 "3 개의 건물을 만드는 수업은 아주 쉽게 할 수 있습니다. 인스턴스 변수를 설정하거나 인스턴스를 만들 때 어떤 작업을 수행하려면 생성자에서 인스턴스 변수를 사용할 수 있습니다.

class Town(): 
    def __init__(self): 
     self.buildings = [ 
      Building("firehouse"), 
      Building("hospital"), 
      Building("church") 
     ] 

우리는 지금 세 가지 다른 객체를 생성하는 하나의 개체를 만들 수 있습니다 : 예를 들어,이 세 개의 건물을 생성하고 배열에 저장합니다 이러한 클래스를 생성합니다. 그것이 수업을 이해하는 초기 장애물을 넘겨 줄 수 있기를 바랍니다.

0

좋아요. 여기서 주된 질문에 답하려고합니다 : 수업이란 무엇입니까.

From Google: class /klas/ 
      noun: class; plural noun: classes 

1. 
a set or category of things having some property or attribute in common and 
differentiated from others by kind, type, or quality. 

프로그래밍에서 클래스는 바로 그 것입니다. 예를 들어 Dog라는 클래스가 있다고 가정 해 보겠습니다. 개들은 "ruf ruff"를 짖는다.

개 정보를 사용하여 파이썬에서 dog 클래스를 정의 할 수 있습니다.

class Dog: 
    def bark(self): 
     print "ruf ruff" 

이 클래스를 사용하기 위해서는 생성자 ()를 호출하여 instantiated입니다 :

Spot = Dog() 

우리는 다음 스팟 껍질하려는, 그래서 우리는 클래스의 method 전화 :

Spot.bark() 

여기에 코드의 세부 사항을 설명하려면이 질문의 범위를 벗어나는 것이 좋습니다.

추가 읽기 : 직접적인 답변으로

http://en.wikipedia.org/wiki/Instance_%28computer_science%29

http://en.wikipedia.org/wiki/Method_%28computer_programming%29

+0

정말 고마워요. 이 롤에 나와 함께 베어링에 대한 ... 정확하게이 일을 무엇입니까? 당신은 "Dog"클래스를 가지고 있고, 수피는 개의 불가사의로 정의되고 있습니까?"ruf ruff"가 인쇄되는 조건은 무엇입니까? – Isturite

+0

@ 스터 라이트, 내 편집을 참조하십시오. – motoku

+0

많이 고마워 ... 나는 이것으로 주변을 어지럽히고 내가 어디서 나가는지 볼거야. – Isturite

-1

:

class Zoo(object): 
    def __init__(self, name="Python Zoo"): 
     self.name = name 
     self.animals = list() 

    def getAnimal(self,index): 
     index = index - 1 # account for zero-indexing 
     try: 
      print("Animal is {0.name}\n Diet: {0.diet}\n Habitat: {0.habitat}".format(
       self.animals[index])) 
     except IndexError: 
      print("No animal at index {}".format(index+1)) 

    def listAnimals(self,index): 
     for i,animal in enumerate(self.animals, start=1): 
      print("{i:>3}: {animal.name}".format(i=i,animal=animal)) 


class Animal(object): 
    def __init__(self, name=None, diet=None, habitat=None): 
     if any([attr is None for attr in [name,diet,habitat]]): 
      raise ValueError("Must supply values for all attributes") 
     self.name = name 
     self.diet = diet 
     self.habitat = habitat 


class ZooDriver(object): 
    def __init__(self): 
     self.zoo = Zoo() 
     self.zoo.animals = [Animal(name="Giraffe", diet="Herbivore", habitat="Outside"), 
          Animal(name="Lion", diet="Carnivore", habitat="Inside"), 
          Animal(name="Bear", diet="Herbivore", habitat="Inside")] 

    def run(self): 
     while True: 
      print("1. List Animals") 
      print("2. Get information about an animal (by index)" 
      print("3. Quit") 
      input_correct = False 
      while not input_correct: 
       in_ = input(">> ") 
       if in_ in ['1','2','3']: 
        input_correct = True 
        {'1':self.zoo.listAnimals, 
        '2':lambda x: self.zoo.getAnimal(input("index #: ")), 
        '3': self.exit}[in_]() 
       else: 
        print("Incorrect input") 
    def exit(self): 
     return 

if __name__ == "__main__": 
    ZooDriver().run() 

나는이 사실이 너무 바보 같은 오타가 발생할 수있는 코드와 실행하지 보통 "off-by-one"오류 (oops)가 있지만 상당히 확신합니다. 강사가 아직 마스터하지 못한 많은 개념 (예 : 문자열 포맷, 거의 확실하게 람다가있는 해시 테이블)을 표시합니다. 따라서 STRONGLY은이 코드를 복사하지 말 것을 권장합니다.

+0

오, 이런! 그를 위해 숙제를하지 마라. 그에게 수업에 대해 가르치십시오, 그러나 그가 복사하고 붙여 넣기 만 할 수있는 코드를주지 마십시오. 그것은 전혀 도움이되지 않습니다. –

+0

@BryanOakley 내가 코드 덤프의 맨 아래에서 언급했듯이 여기서 사용한 많은 기술은 OOP로 고생하는 사람에게는 실제로 실현 가능하지 않지만 구조를 설명하는 데 도움이됩니다. 기본 사항을 설명하는 EXCELLENT 답변 외에도, 약간의 완성 된 코드, 특히 의도 된 과제를 완료하는 코드를 보면서 좀 더 완전한 이해가 가능해졌습니다. 기초와 이론을 가르친 다음 구현을 가르친 다음 디자인과 숙달을 가르칩니다. 어쨌든 그가 내 코드를 복사한다면 잃어버린 유일한 사람은 그 사람이 될 것입니다 .... –

+0

@BryanOakley 게다가 나는'{ '2': lambda x를 볼 수있는 시작 프로그래밍 수업의 강사를 찾지 못한다. : self.zoo.getAnimal (input ("index # :"))} [in _]()'그리고 즉시 plaigiarism 울지 말것 :) –

관련 문제