2013-05-21 6 views
0

안녕하세요 저는 파이썬을 배우고 있습니다. 또한 제 첫 번째 언어이기도합니다. 나는 수업이 어떻게 작동하는지 알아 내려고 노력하고있다. 나는이 작은 코드를 가지고 있으며 일 주일간 검색 한 후에는 작동시키지 못합니다. 도와 주셔서 감사합니다.파이썬 클래스를 이해하는 방법?

또한 getattr과 super가하는 일을 이해하려고합니다. 나는 설명서를 읽었지만 이해하기가 쉽지 않습니다. 영어는 제 모국어가 아니며 가끔 이해하기가 어렵습니다.이 두 가지를 설명 할 수 있거나 간단하게 설명하는 웹 사이트를 알고 있다면 정말 감사드립니다. 나중에 next = self.themap을 할당하는 self.themap

되고있다 있도록 이제 next는 문자열에 대한 참조입니다,

import sys 


class Map(object): 
    dicti = {'stuff': stuff(), 
      'more_stuff': more_stuff() 
    } 

    class Stuff: 

     def stuff(self): 
      print "did it work?" 
      next = raw_input("type next: ") 

      if next == "next": 
       return 'more_stuff' 
      else: 
       print "what? lets try again." 
       return 'stuff'  

    class MoreStuff: 

     def more_stuff(self): 
      print "ok" 

      next = raw_input('type next: ') 

      if next == "next": 
       return 'stuff' 

      else: 
       print "bye." 
       sys.exit(0) 


class NewClass(Map): 

    def __init__(self, themap): 

     self.themap = themap 

    def Continu(self): 

     next = self.themap 

     while True: 
      print "----" 

      room = next() 




a_test = NewClass('stuff') 
a_test.Continu() 
+3

"나는 작동하지 않습니다"- 어떻게해야할까요? – mgilson

+0

나는 정확한 말을하지 않아서 미안해. 작동하지 않는 이유를 이해하는 데 도움을 얻으 려합니다. 죄송합니다. 수업과 사전을 사용하여 방을 통과한다고 가정합니다. 아니면 최소한 그렇게하기 위해 노력하고 있습니다. – user2227702

+0

우리는 그것이 효과가 없다는 것을 이해합니다. 그러나 * 왜 * 우리가 당신을 도울 수 있도록 작동하지 않는지 이해하기 위해서, 당신이 기대하는 바를 이해해야합니다. – mgilson

답변

1

당신은 NewClass에 문자열 'stuff' 전달됩니다 여기

코드입니다 'stuff'. 당신이 당신의 클래스에 대한 문제는 아무것도 (즉 가혹한 경우 죄송합니다)를 표현하지 않는 것이다 문자열을

+0

감사합니다. 나는 게터를 쓸 것인가? 만약 내가 여기에 올바른 이해합니다. http://effbot.org/zone/python-getattr.htm – user2227702

+0

@ user2227702 : 아니요, 원하는대로 작동하는 가치를 얻을 수있는 속성이 없습니다. 당신은 하나를 구현하지 않았습니다. – kampu

+0

oop 및 python에 대한 책을 권할 수 있습니까? 나는 매우 어려운 시간을 이해하고있다. 이 시점까지는 모든 것이 다소 쉬웠지만, 지금은 정말로 붙어 있습니다. 다시 감사합니다. – user2227702

0

를 호출 할 수 없기 때문에

room = next()이 실패합니다. 코드를 수정하는 대신 몇 가지 예를 보여 드리겠습니다.

다음은 내가 작성한 예제 클래스입니다. 첫 번째 것은 다소 어리 석었지만 실제로는 단순하고 당신에게 뭔가를 가르쳐 줄 수 있습니다. 그것은 getattr에서 멀지 않은 hasattr을 사용합니다.

클래스는 논리를 가질 수 있지만 객체에 대한 정보를 관리하는 방법으로 간주합니다. 나는 오브젝트을 파이썬의 의미와 단어의 일반적인 의미로 의미합니다.

또한 다른 클래스 들여 쓰기가 Map 아래에 들었습니다. 지금은 클래스와 별도로 작업하십시오. 그런 사람들을 들여 쓰기하는 것은 그들에게 Map

class OppMan: 

    def __init__(self, awake = False): 

     self.truth = awake 
     self.answers = 0 


    def echo(self, userIn): 

     if type(userIn) == (int or float): 
      answer = -1*self.truth*userIn 

     elif hasattr(userIn, '__str__') or hasattr(userIn, '__repr__'): 
      answer = 'not '*self.truth + str(userIn) 

     else: 
      try: 
       answer = -1*userIn 
      except: 
       answer = 'I am only human' 

     self.answers += 1 
     return answer 

사용 예제에 대한 특별한 관계를 포기하지 않습니다

Barney = OppMan(True) 

print(Barney.echo(420)) 
print(Barney.echo('yours')) 
print(Barney.echo(['a','b','c'])) 
print(Barney.answers) 


Betty = OppMan() 

print(Betty.echo('you figure it out')) 

이것은 일종의 분수처럼 :

class Rational: 

    def __init__(self, numer, denom): 
     self.n = numer 
     self.d = denom 



    def __add__(self, other): 
     return Rational((self.n*other.d)+(self.d*other.n), self.d*other.d) 

    def __mul__(self, other): 
     return Rational(self.n*other.n, self.d*other.d) 

    def __str__(self): 
     return str(self.n) + '/' + str(self.d) 

사용 예제 :

foo = Rational(3,5) 
bar = Rational(1,7) 
print(foo+bar) 


foo = Rational('3','5') 
bar = Rational(1,2) 
print(foo+bar) 

"방", 사전 등으로 무엇을하려는 것인지 잘 모르겠지만이를 연구하고 해결할 간단한 문제를 찾으십시오. 어떻게 작동하는지 파악하는 데 시간이 걸릴 수 있지만 결국에는 수업에 대해 더 많이 알게됩니다.

+0

감사합니다. 가혹하지 않은지 걱정하지 마십시오. 나는 지금 막 처음으로 프로그래밍을 배우는 중이라고 말했고, oop과 수업은 나를 놀라게했다. 도와 줘서 고마워. 어제 많이 읽은 후 오늘 나는 이해하기 시작했습니다. 나는 계속 연습해야합니다. 다시 한번 감사드립니다. – user2227702

관련 문제