A.py
import B
b = B.B
b.cc()
B.py
class B:
variable = "TTT"
def __init__(self):
B.variable = "this is BB class"
def cc():
print(B.variable);
우선 Python 에서는 두가지 문법이 존재하는데,
B.B 와 B.B() 가 그것이다.
B.B 는 Static 형식으로 사용할 수 있다 == 생성자가 실행되지 않는다.
B.B() 는 Instance 를 만들기에 == 생성자를 실행시킨다.
수정한 A.py
import B
b = B.B()
b.cc()
에러가 발생하는데, 우리는 b 의 '인스턴스' 를 통해 b.cc() 를 실행시켰다.
그런데 b.cc() 선언을 살펴보면 self parameter 없다.
B.py
class B:
variable = "TTT"
def __init__(self):
B.variable = "this is BB class"
def cc():
print(B.variable);
즉, 전역으로 사용되게끔 선언된 함수라는것을 알 수 있다.
때문에 instance 로 선언한 b 에서는 사용할 수 없었던 것이다.
파라미터로 self 를 추가 해 주면 생성자 루틴을 타고
인스턴스를 통해 variable 이 수정되면서
"this is BB class" 출력이 나오게 된다.
수정한 B.py
class B:
variable = "TTT"
def __init__(self):
B.variable = "this is BB class"
def cc(self):
print(B.variable);
아래 이미지들을 참조하면 이해하기 쉬울 것이다.
다시한번 에러 메세지를 돌아보면
TypeError: B.cc() missing 1 required positional argument: 'self'
너가 준건 인스턴스 형인데, 인스턴스 형으로 처리하려면 self 가 필요해.
근데 파라미터에 self 선언이 안되어있어. 이거 문제 있는거 같음.
이라는 의미다.