2013-05-25 1 views
-3
#C:/Python32 

class Person: 
    def __init__(self, name = "joe" , age= 20 , salary=0): 
     self.name = name 
     self.age = age 
     self.salary = salary 
    def __printData__(self): 
      return " My name is {0}, my age is {1} , and my salary is {2}.".format(self.name, self.age, self.salary) 
    print(Person) 

class Employee(Person): 
    def __init__(self, name, age , salary): 
     Person. __init__ (self,name = "Mohamed" , age = 20 , salary = 100000) 
     def __printData__(self): 
      return " My name is {0}, my age is {1} , and my salary is {2}.".format(self.name, self.age, self.salary) 
    print(Employee) 


p= Person() 
e = Employee() 
+0

왜 Python32 shebang과 python-2.7 태그가 있습니까? – geoffspear

답변

5

귀하의 문제를 단순화 할 수 있습니다 찾을 수 없습니다

class Person: 
     print(Person) 

이것은 NameError을 올릴 것이다. 클래스를 생성 할 때 클래스의 본문이 실행되어 특별한 네임 스페이스에 배치됩니다. 그런 다음 해당 네임 스페이스는 실제로 클래스를 생성하는 역할을 담당하는 type으로 전달됩니다. 코드에서

, 당신은 (- 그것은 type에 전달하고 클래스 이름에 바인드 도착하기 전에 클래스의 몸이 실행되고있는 단계에서) Person 실제로 생성 된 클래스 이전 print(Person)에 노력하고 NameError으로 연결됩니다.

+0

mgilson이 맞다. 인쇄물을 print (locals())로 대체하면 더 나아가 클래스 본문을 실행할 때 정의 된 것을 보여줄 것이다. – deufeufeu

+0

@deufeufeu - 당신도'print (globals()) '해야한다고 생각합니다. – mgilson

+0

예,이 경우 전역 클래스()가 클래스 자체에 대한 정보를 제공하지 못하도록 할 수 있다고 가정했습니다. – deufeufeu

0

인쇄가 호출 될 때 클래스가 특정 정보를 반환하도록하고 해당 클래스의 인스턴스를 만들 때 해당 정보가 인쇄되기를 원합니다. 이를 수행하는 방법은 클래스에 대해 __repr__ (또는 __str__, 자세한 내용은 Difference between __str__ and __repr__ in Python 참조) 메소드를 정의하는 것입니다. 그런 다음 클래스의 인스턴스에서 매번 print가 호출되면 해당 __repr__ 메소드에서 반환 된 내용이 인쇄됩니다. 그런 다음 인스턴스를 인쇄하는 행을 __init__ 메소드에 추가하면됩니다. 클래스 내에서 현재 인스턴스는 특수 self 키워드로 참조되며 클래스 이름은 기본 네임 스페이스의 클래스 범위 밖에 정의됩니다. 따라서 print(Person)이 아니라 print(self)으로 전화해야합니다. 귀하의 예를위한 코드는 다음과 같습니다.

class Person: 
    def __init__(self, name = "joe" , age= 20 , salary=0): 
     self.name = name 
     self.age = age 
     self.salary = salary 
     print(self) 
    def __repr__(self): 
     return " My name is {0}, my age is {1} , and my salary is {2}.".format(self.name, self.age, self.salary) 

joe = Person() 
>>> My name is joe, my age is 20 , and my salary is 0. 
관련 문제