Skip to main content

Command Palette

Search for a command to run...

python class 정리

Updated
3 min read
python class 정리

클래스와 객체

클래스 = 과자들, 객체 = 과자 틀로 찍어낸 과자

  • 클래스(class)란 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면 (과자 틀)

  • 객체(object)란 클래스로 만든 피조물(과자 틀로 찍어낸 과자)를 뜻한다.

클래스로 만든 객체는 객체마다 고유한 성격을 가진다.

동일한 클래스로 만든 객체들은 서로 영향을 주지 않는다.


class Cookie:
    pass

객체는 클래스로 만들고 1개의 클래스는 무수히 많은 객체를 만들어낼 수 있다.

# 객체 만들기
a = Cookie()
b = Cookie()

계산기 만들기

class FourCal:
    def setdata(self, first, second):       # 메서드의 매개변수
        self.first = first      # 메서드의 수행문 
        self.second = second
    def add(self):
        result = self.first + self.second
        print(result)
    def mul(self):
        result = self.first * self.second
        print(result)
    def sub(self):
        result = self.first - self.second
        print(result)
    def div(self):
        result = self.first / self.second
        print(result)

인스턴스 생성 및 메서드 호출

a = FourCal()    # 인스턴스 생성
b = FourCal()
a.setdata(4,2)    # 생성된 인스턴스를 이용해 메서드 호출
b.setdata(3,8)

a.add()
a.mul()
a.sub()
a.div()
b.add()
b.mul()
b.sub()
b.div()

위의 코드에서 a.setdata(4,2) 메서드를 수행하지 않고 a.add()를 먼저 수행하면 오류가 발생

이는 setdata 메서드를 수행해야 객체 a의 인스턴스 변수 first, second가 생성되기 때문이다.

객체에 first, second와 같은 초기값을 생성해야 할때는 setdata와 같은 메서드를 호출하여
초기값을 설정하기 보다는 생성자를 구현하는 것이 더 안전하다.

생성자 (__inti__)

  • 생성자 : 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.
class FourCal:
    # 생성자
    def __init__(self, first, second):
        self.first = first
        self.second = second

    def setdata(self, first, second):       # 메서드의 매개변수
        self.first = first      # 메서드의 수행문 
        self.second = second
    def add(self):
        result = self.first + self.second
        print(result)
    def mul(self):
        result = self.first * self.second
        print(result)
    def sub(self):
        result = self.first - self.second
        print(result)
    def div(self):
        result = self.first / self.second
        print(result)

생성자 __init__ 작성 후 인스턴스 생성 및 메서드 호출

a = FourCal(4,2)    # 인스턴스 생성
b = FourCal(3,8)

a.add()    # 메서드 호출
a.mul()

인스턴스 변수를 선언하고, 메서드를 따로 선언할 필요 없이

생성자를 선언 해뒀다면 인스턴스에 클래스를 불러와서 바로 사용할 수 있다.


클래스 상속

class 클래스_이름(상속할_클래스_이름):
    pass

아래에 선언하는 클래스인 MoreFourCal 클래스는 FourCal 클래스를 상속했으므로
FourCal의 모든 기능을 사용할 수 있다.

class MoreFourCal(FourCal):
    def pow(self):
        result = self.first ** self.second
        print(result)

a = MoreFourCal(4, 2)
a.add()    # FourCal 클래스에서 선언한 기능 이용 가능
a.pow()

상속은 MoreFourCal 클래스처럼 기존 클래스 FourCal는 그대로 나두고 클래스의 기능을 확장할 때 주로 사용한다.


메서드 오버라이딩

  • 부모 클래스에 있는 메서드를 동일한 이름으로 다시 만드는 것

  • 메서드 오버라이딩을 하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.

a = FourCal(4,0)
a.div() 를 실행하면 ZeroDivisionError: division by zero 오류가 발생한다.

0으로 나눌 때 오류가 아닌 값 0을 리턴받는 방법은?

class SafeFourCal(FourCal):
    def div(self):
        if self.second == 0:        # 나누는 값이 0인 경우, 0을 리턴하도록 수정
            print(0)
        else:
            print(self.first/self.second)

a = SafeFourCal(4,0)
a.div()

FourCal 클래스의 div 메서드를 동일한 이름으로 다시 작성

이렇게 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 내용으로 다시 만드는 것을

메서드 오버라이딩이라 한다.

메서드 오버라이딩을 하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.


클래스 변수

  • 클래스 변수는 클래스 안에 함수를 선언하는 것과 마찬가지로 클래스 안에 변수를 선언후 생성
class Family:
    lastname = '안'     # lastname : 클래스 변수

# 클래스 변수는 클래스_이름.클래스_변수 로 사용 가능하다.
print(Family.lastname)    # 안

# 또는 Family 클래스로 만든 객체를 이용해도 클래스 변수를 사용할 수 있다.
a = Family()
b = Family()
print(a.lastname)    # 안
print(b.lastname)    # 안

클래스 변수의 값을 바꾸면 클래스로 만든 객체의 값도 모두 변경된다.

Family.lastname = '박'
print(a.lastname)    # 박

즉, 인스턴스 변수는 다른 객체들의 영향을 받지 않고 독립적으로 그 값을 유지하지만,

클래스 변수는 클래스로 만든 모든 객체에 공유된다.

6 views

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts