2014-07-09 5 views
-2
class Test(object): 

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

    def new(self): 
     name = str(input('Name: ')) 
     reg = Test(nombre) 
     return reg 

person = new() 

왜이 코드가 "NameError : name 'new'not defined"를 던지나요?Python의 NameError 인스턴스 클래스

답변

1
class Test(object): 
    def __init__(self, name): 
     self.name = name 
    @staticmethod 
    def new(): 
     name = str(input('Name: ')) 
     reg = Test(nombre) 
     return reg 

person = Test.new() #ok since new is attached to a class namespace 
person = new() # raises name error since new is part of Test, not the global namespace 

아마도 아니면

class Test(object): 
    def __init__(self, name): 
     self.name = name 

def new(): 
    name = str(input('Name: ')) 
    reg = Test(nombre) 
    return reg 

person = new() #ok since new is in the global namespace 
+0

hmmm ... 어떤 설명을 downvote? –

+0

이것이 왜 취소 된 이유는 확실하지 않지만 추측에는 설명이 부족합니다. – merlin2011

+0

hmmm 어쩌면 ... 그게 지금 충분히 충분하다 ... "네임 스페이스"이외의 다른 말을 많이하지 않아도된다. –

4

난 당신이 Test 클래스의 새로운 인스턴스를 구축하고, 사용자가 제공 한 이름으로 그것을로드하려고한다고 가정합니다.

먼저 들여 쓰기를 수정해야합니다.

둘째, 비 클래스 함수에 self 인수가 필요하지 않습니다.

더 많은 Pythonic 방법은 논리를 생성자 자체에 넣는 것일 수 있습니다.

class Test(object): 
    def __init__(self, name=None): 
     if name is None: 
      name = raw_input('Name: ') 
     self.name = name 

person = Test()