2014-01-11 3 views
1

파이썬에서 클래스를 작성 중이며 해당 메소드 중 하나에서 객체에 할당 할 수 있는지 여부를 알 수 없습니다. 예 :내부의 객체에 파이썬 할당

class foo: 
    def __init__(self): 
     self = <something> 

해당 과제 (3 행)가 맞습니까?

+1

대답은 "예 당신이 할 수있는"입니다. 하지만, 왜 그걸 할거야? –

+2

과제에 대한 기대 사항은 무엇입니까? – murgatroid99

+0

'self'라는 이름에 지정할 수는 있지만 "객체에 지정"하지 않습니다. 객체에 아무런 영향을 미치지 않습니다. – BrenBarn

답변

2

self은 개체에 대한 참조입니다. 변수를 지정하면 변수 self가 참조하는 객체를 변경하지만 해당 메소드 외부의 것은 수정하지 않습니다.

기능은 다음 코드와 유사합니다

def change(a): 
    a = 10 
    print(a) # prints 10 

x = 5 
change(x) 
print(x) # prints 5 
2

self 이름을 지정할 수는 있지만 "개체에 지정하지 않았습니다." 객체에 아무런 영향을 미치지 않습니다. 로컬 변수 self에 값을 할당합니다.

2

아니, 그것은 "객체에 할당"되지 않습니다.

  1. foo.__init__에 로컬 변수 self 만들기 : 이후

    >>> class foo: 
    ...  def __init__(self): 
    ...   self = 'hi' 
    ...   print(self) 
    ... 
    >>> foo() 
    'hi' 
    >>> 
    
  2. , foo 것이다 클래스의 초기화시 foo.__init__에 부여 된 self 인수를 기본적으로, 당신의 코드는 다음과 같은 두 가지 작업을 할 것입니다 덮어 쓴다. 당신이 당신이 설명 일을 요약하면

    >>> class foo: 
    ...  def __init__(self): 
    ...   self = 'hi' 
    ...   print(self) 
    ...   self.attr = 'hello' 
    ... 
    >>> foo() 
    hi 
    Traceback (most recent call last): 
        File "<stdin>", line 1, in <module> 
        File "<stdin>", line 5, in __init__ 
    AttributeError: 'str' object has no attribute 'attr' 
    >>> 
    

,하지만 당신은 정말 안 : 다른 말로하면, 그 줄 끝에서, 당신은 더 이상 인스턴스가 foo 속성을 만들 수 없습니다. 그것은 당신의 코드에 대해 긍정적 인 것을하지 않습니다. 대신 나중에 문제가 발생할 수 있습니다. 그리고 그렇지 않더라도 코드를 읽는 사람들은 여전히 ​​혼란 스러울 것입니다. , 당신은 당신이 인스턴스가 foo에 대한 속성을 만들고 싶어 것을 의미한다 "객체에 할당"에 의해 아마


? 그렇다면, 구문은 다음과 같습니다 아래

class foo: 
    def __init__(self): 
     self.<attribute name> = <something> 

는 데모입니다 :

>>> class foo: 
...  def __init__(self): 
...   self.my_attribute = 'value' 
... 
>>> test = foo() 
>>> test.my_attribute 
'value' 
>>> 
관련 문제