[Python] Class 와 Self 에 관해

2022. 6. 19. 20:53·Programming/Python

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);

 

아래 이미지들을 참조하면 이해하기 쉬울 것이다.

인스턴스를 이용해 출력한 "this is bb class"

 

B.B() -> B.B 로 변경한 뒤, cc() 함수 호출 시 발생하는 에러.

 

def cc(self) 선언부에서 self 를 제거하니 전역적으로 잘 작동하는 모습, 생성자는 동작하지 않는다.

 

 

다시한번 에러 메세지를 돌아보면

TypeError: B.cc() missing 1 required positional argument: 'self'

너가 준건 인스턴스 형인데, 인스턴스 형으로 처리하려면 self 가 필요해.

근데 파라미터에 self 선언이 안되어있어. 이거 문제 있는거 같음.

 

이라는 의미다.

 
저작자표시 비영리 동일조건 (새창열림)

'Programming > Python' 카테고리의 다른 글

오류: OSError: We couldn't connect to 'https://huggingface.co' to load this file 해결법.  (0) 2025.01.30
'Programming/Python' 카테고리의 다른 글
  • 오류: OSError: We couldn't connect to 'https://huggingface.co' to load this file 해결법.
Cyp
Cyp
  • Cyp
    Cyp Software Blog
    Cyp
  • 전체
    오늘
    어제
    • Cyp Blog (166)
      • Artificial Intelligence (43)
        • Article Review (22)
        • Post (3)
        • Basic (15)
        • Preferences (3)
      • Cyber Security (1)
      • Programming (46)
        • C++ (21)
        • C# (19)
        • Python (2)
        • Rust (0)
        • Java (1)
      • Algorithm (17)
        • BACKJOON (15)
      • Operating System (14)
        • WSL (2)
        • Windows (1)
        • Linux (5)
        • Security (3)
      • Tools (26)
        • Docker (3)
        • DataBase (2)
        • SSH (1)
        • Doxygen (2)
        • Etc (17)
      • Miscellaneous (14)
        • Book (2)
        • Hardware (2)
        • Hevel (1)
  • 블로그 메뉴

    • Home
    • Guest Book
  • 공지사항

    • 블로그 업데이트 노트
    • 블로그 운영방침
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    C4819
    utf-8 bom
    Bom
    UTF-8 without BOM
    y-cruncher
  • hELLO· Designed By정상우.v4.10.5
Cyp
[Python] Class 와 Self 에 관해
상단으로

티스토리툴바