나는 꽤 자주이 오류를 받고 있어요 그래서 예를주고 싶습니다에 정의되어 있지 않습니다 "? 사전에 감사드립니다.나가서 설명하자면 NameError :</p> <pre><code>class Me(): def __init__(self,name): self.name=name def call(): myname=Me("Alex") printIt() def printIt(): print(myname.name) call() </code></pre> <p>왜 내가 대신 인쇄이 오류를 얻고있다 "알렉스 : 이름 'MyName로는'파이썬
0
A
답변
0
블록에 정의 된 변수는 블록 범위를 가지고 있습니다. 즉, 블록 범위는 외부에서 볼 수 없습니다. myname
은 call
이며, call
에만 표시됩니다.
우리가 그러나 당신의 스타일
myname = None
def call():
global myname
myname = Me("Alex")
printIt()
def printIt(): # now we could access myname
print(myname.name)
를 수행하면 더 나은 선택은
def call():
myname = Me("Alex")
printIt(myname)
def printIt(somebody): # now we could access aPerson as well
print(somebody.name)
0
myname
가 정의 어디에에만 함수 내에서 사용할 수있는 지역 변수 인을 사용하여 불필요한 전역을 방지하는 것입니다.
def call():
myname = Me("Alex")
printIt(myname)
def printIt(myname):
print(myname.name)
+0
완벽하게 작동합니다. 감사합니다! 그것은 실제로 의미가 있습니다. –
0
MyName로 전역 변수되지 않습니다 :
인수로 전달하려고합니다. 그것은 printIt 메소드의 범위에 있지 않습니다. 그것은 호출 메소드에 국한됩니다. 그것에 액세스하고 싶다면 전역 적으로 선언하거나 myname 객체를 printItem에 대한 매개 변수로 전달하십시오.
의견을 보내 주셔서 감사합니다. 나는 그것을 지금 이해한다. 특히 이것은 내 스타일을 완벽하게 고려하여 작동합니다. –