파이썬에서 클래스를 작성 중이며 해당 메소드 중 하나에서 객체에 할당 할 수 있는지 여부를 알 수 없습니다. 예 :내부의 객체에 파이썬 할당
class foo:
def __init__(self):
self = <something>
해당 과제 (3 행)가 맞습니까?
파이썬에서 클래스를 작성 중이며 해당 메소드 중 하나에서 객체에 할당 할 수 있는지 여부를 알 수 없습니다. 예 :내부의 객체에 파이썬 할당
class foo:
def __init__(self):
self = <something>
해당 과제 (3 행)가 맞습니까?
self
은 개체에 대한 참조입니다. 변수를 지정하면 변수 self가 참조하는 객체를 변경하지만 해당 메소드 외부의 것은 수정하지 않습니다.
기능은 다음 코드와 유사합니다
def change(a):
a = 10
print(a) # prints 10
x = 5
change(x)
print(x) # prints 5
self
이름을 지정할 수는 있지만 "개체에 지정하지 않았습니다." 객체에 아무런 영향을 미치지 않습니다. 로컬 변수 self
에 값을 할당합니다.
아니, 그것은 "객체에 할당"되지 않습니다.
가 foo.__init__
에 로컬 변수 self
만들기 : 이후
>>> class foo:
... def __init__(self):
... self = 'hi'
... print(self)
...
>>> foo()
'hi'
>>>
, 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'
>>>
대답은 "예 당신이 할 수있는"입니다. 하지만, 왜 그걸 할거야? –
과제에 대한 기대 사항은 무엇입니까? – murgatroid99
'self'라는 이름에 지정할 수는 있지만 "객체에 지정"하지 않습니다. 객체에 아무런 영향을 미치지 않습니다. – BrenBarn