점프 투 파이썬(클래스와 전역, 지역변수 질문)
class A:
def add1(self, a, b):
self.a = a
self.b = b
self.r = 5
return self.a + self.b + self.r
class B(A):
def add2(self, a, c):
self.a = a
self.c = c
k = 1/self.a
s = 3
p = A()
def plus(m):
# <---------- global k (추가)
k += 1 * s
return m.add1(k, k) + self.c
return self.c + plus(p)
n = B()
print(n.add2(2, 5))
>> local variable 'k' referenced before assignment
클래스의 상속부분을 학습하기 위해 위와 같이 작성하였더니 오류가 발생하였습니다
[질문1]
1) local variable 'k' referenced before assignment오류발생
-> global k 추가
-> 2) name 'k' is not defined오류발생
1)을 해결하기 위해 global k를 추가 하였더니 2)의 오류가 발생하였습니다. 그런데
2)의 오류는 지역 변수 k를 만든 함수 안에서만 접근할 수 있고 바깥에서는 접근할 수 없다는 오류로 알고있는데
global k를 추가하였으므로 문제가 없을것 같은데 오류가 발생한 이유가 궁금하여 질문드립니다.
[질문2]
고민하던 중 아래와 같이 global k를 삭제하고 k대신 전부 self.k로 수정하면 올바른 값인 22가 출력됩니다.
이와 같이 하면 해결되는 이유가 궁금하여 질문드립니다
[질문3]
아래의 s=3의 경우 k와 같이 생각하면 s도 전역/지역변수 오류 등이 똑같이 발생하고 이를 위해 self.s = 3 형태로 쓰여야 할듯한데 k와는 달리 s=3으로 하여도 아무 문제없이 22가 출력됩니다 k와 s의 차이점이 무엇인지 질문드립니다
class A:
def add1(self, a, b):
self.a = a
self.b = b
self.r = 5
return self.a + self.b + self.r
class B(A):
def add2(self, a, c):
self.a = a
self.c = c
self.k = 1/self.a
s=3
p = A()
def plus(m):
self.k += 1 * s
return m.add1(self.k, self.k) + self.c
return self.c + plus(p)
n = B()
print(n.add2(2, 5))
>>22
desk8203 님 228
M 2022년 9월 24일 11:39 오후