728x90
클래스 변수
클래스 정의에서 메서드(method)밖에 존재하는 변수
→ 해당 클래스를 사용하는 모두에게 공용으로 사용된다.
→ 일반적으로 ‘클래스명.변수명’ 으로 엑세스 할 수 있다.
class Calc:
result = 0
def __init__(self, num1, num2):
self.num1 = num1
self.num2 = num2
Calc.result = -100
인스턴스 변수
하나의 클래스로부터 여러 객체 인스턴스를 생성해서 사용할수 있다. 클래스 변수는 클래스에 하나 생성해야 하지만 인스턴스 변수는 각 객체 인스터스마다 별도 존재하다.
‘self.변수명’형식으로 사용한다.
Python 코딩 관례(Convention)상 내부적으로만 사용하는 변수 혹은 메서드는 그 이름 앞에 하나의 밑줄(_) 을 붙인다. 하지만 이는 코딩 관례에 따른 것일 뿐 실제 밑줄 하나를 사용한 멤버도 public 이므로 필요하면 외부에서 엑세스할 수 있다.
만약 특정 변수명이나 메서드를 private으로 만들어야 한다면 두개의 밑줄(__)을 이름 앞에 붙이면 된다
def __init__(self, num1, num2):
self.num1 = num1
self.num2 = num2
self.__sum_result = num1 + num2
def __interalRun(self):
# private 메서드 class 내에서만 사용가능하다
# __ 는 기존 사용하고 있는 내부 매서드들이 있으니 해당 매서드이름을 잘 파악하고 사용해야 한다
pass
클래스 메서드
메서드 앞에 @classmethod 라는 Decorator를 표시하여 해당 메서드가 클래스 매서드임을 표시
객체 인스턴스를 의미하는 self대신 cls라는 클래스를 의미하는 파라미터를 전달 받는다.
클래스 변수를 액세스할 필요가 있을 때 사용
정적 메서드
메서드 앞에 @staticmethod 라는 Decorator를 표시하여 해당 메서드가 정적 메서드임을 표시
self 파라미터를 가지지 않는다 실제로는 클래스내에 객체 필드와 독립적이지만 class 로직상 해당메서드가 사용되어 질때 쓴다.
class Rectangle:
count = 0 # 클래스 변수
def __init__(self, width, height):
self.width = width
self.height = height
Rectangle.count += 1
# 인스턴스 메서드
def calcArea(self):
area = self.width * self.height
return area
# 정적 메서드
@staticmethod
def isSquare(rectWidth, rectHeight):
return rectWidth == rectHeight
# 클래스 메서드
@classmethod
def printCount(cls):
print(cls.count)
# 테스트
square = Rectangle.isSquare(5, 5)
print(square) # True
rect1 = Rectangle(5, 5)
rect2 = Rectangle(2, 5)
rect1.printCount() # 2
'프로그래밍 > python' 카테고리의 다른 글
Python을 익히기에 좋은 프로젝트 (1) | 2024.12.28 |
---|---|
datahub 버젼 업 후 old version oracle 데이터 미수집 문제 (3) | 2024.11.20 |
pyenv를 이용한 여러 버전의 파이선 하나의 컴퓨터에서 이용하 (1) | 2024.11.08 |
Python argparse.ArgumentParser() (0) | 2023.04.24 |
python coding style (0) | 2019.03.06 |