본문 바로가기

PYTHON-BACK

#파이썬 기초 7일차_2

728x90

클래스(Class)

1. 클래스(Class) 정의

클래스(Class)

클래스는 객체 지향 프로그래밍에서 특정 객체를 생성하기 위한 변수와 메서드를 정의하는 일종의 틀입니다. 클래스는 객체의 설계도이며, 객체의 상태를 나타내는 멤버 변수와 객체의 동작을 나타내는 메서드(함수)로 구성됩니다.

기본 용어

클래스 객체(Class Object)

  • 클래스 정의문에 의해 지정된 문장들을 포함합니다.
  • 인스턴스 객체를 생성하는 틀의 역할을 합니다.
  • 클래스 내의 모든 메서드에 대한 정의와 정보를 보유합니다.
  • 인스턴스에서 메서드를 호출할 때, 클래스의 메서드와 바인딩되어 처리됩니다.

인스턴스 객체(Instance Object)

  • 클래스 객체에 의해 생성된 실제 객체를 말합니다.
  • 클래스의 __init__ 메서드 내부에서 지정된 속성을 가지며, 메서드는 클래스의 메서드를 사용합니다.
  • 각 인스턴스는 독립적인 네임스페이스를 가지며, 서로 다른 인스턴스 간의 데이터는 서로 영향을 주지 않습니다.

클래스 객체 멤버(Class Object Member)

  • 클래스 속성, 클래스 메서드, 정적 메서드 등을 포함합니다.
  • 클래스 자체에서 직접 호출하여 사용할 수 있는 멤버들입니다.
  • 인스턴스는 자신의 네임스페이스에 정의된 속성을 제외하고 클래스 멤버에 직접 접근할 수 있습니다.

인스턴스 객체 멤버(Instance Object Member)

  • 인스턴스 속성만을 관리하는 멤버입니다.
  • 일반적으로 인스턴스 메서드는 클래스 내에서 정의되고, 각 인스턴스에서 개별적으로 관리됩니다.
  • 인스턴스 객체는 자신의 상태를 나타내는 속성과 해당 속성을 조작하는 메서드를 포함합니다.

프로퍼티 속성(Property)

  • 메서드를 기반으로 이름으로 접근하여 호출되는 속성입니다.
  • 프로퍼티는 속성에 접근할 때 메서드의 호출을 통해 추가적인 동작을 수행할 수 있도록 합니다.
  • 클래스 내에서 정의된 메서드를 속성처럼 사용할 수 있어 편리합니다.
1.1 객체의 분류
  • 사물에는 기본 정보를 관리하는 클래스가 필요
class BookInfo :
    def __init__(self,title,author,date,publisher,page) :
        self.title = title
        self.author = author
        self.date = date
        self.publisher = publisher
        self.page = page

book1 = BookInfo("서시","윤동주","1939","출판사",100)
book2 = BookInfo("파이썬","달문","2017","출판사",900)

 

영문 순서대로 정렬되어 들어감

import pprint
pprint.pprint(book1.__dict__)
pprint.pprint(book2.__dict__)

{'author': '윤동주',
 'date': '1939',
 'page': 100,
 'publisher': '출판사',
 'title': '서시'}
{'author': '달문',
 'date': '2017',
 'page': 900,
 'publisher': '출판사',
 'title': '파이썬'}

 

책에 대한 메타 정보인 범주 관리

  • 메타 정보 : 좀더 상위에서 정보를 그룹핑 해서 관리할 수 있는것
  • isdn : 책에대한 국제 정보 코드(코드에서는 임의로 지음)
  • super()는 파이썬에서 부모 클래스(또는 상위 클래스)의 메서드를 호출할 때 사용하는 내장 함수
  • ** 연산자는 파이썬에서 딕셔너리를 언패킹(unpacking)하는 데 사용
  • 이를 통해 딕셔너리의 키-값 쌍을 함수나 메서드에 개별적인 키워드 인수로 전달할 수 있다.
  • ** 연산자를 사용하면 딕셔너리의 모든 키-값 쌍이 해당 함수의 키워드 인수로 확장한다.
class BookClass(BookInfo) : # BookInfo 값 상속(상속 받을때는 괄호 안에 넣어주면 됨)
    def __init__(self,title,author,date,publisher,page,isdn=None) :
        super().__init__(title,author,date,publisher,page)
        self.isdn = isdn

bookclass1 = BookClass(**book1.__dict__,isdn="1111111111111") # 직접 집어 넣어주어도 됨
bookclass2 = BookClass(**book2.__dict__,isdn="2222222222222")
import pprint
pprint.pprint(bookclass1.__dict__)
pprint.pprint(bookclass2.__dict__)

{'author': '윤동주',
 'date': '1939',
 'isdn': '1111111111111',
 'page': 100,
 'publisher': '출판사',
 'title': '서시'}
{'author': '달문',
 'date': '2017',
 'isdn': '2222222222222',
 'page': 900,
 'publisher': '출판사',
 'title': '파이썬'}

  • 실제 만들어져 있는 객체로써 책을 관리
  • 단계별로 클래스들은 상속받고 연결받고 ... 진행되는 것이다.
class BookInv(BookClass) :
    def __init__(self,title,author,date,publisher,page,isdn,inventno=None) :
        super().__init__(title,author,date,publisher,page,isdn)
        self.inventno = inventno

bookinv1 = BookInv(**bookclass1.__dict__,inventno=3000)
bookinv2 = BookInv(**bookclass2.__dict__,inventno=3000)
import pprint
pprint.pprint(bookinv1.__dict__)
pprint.pprint(bookinv2.__dict__)

{'author': '윤동주',
 'date': '1939',
 'inventno': 3000,
 'isdn': '1111111111111',
 'page': 100,
 'publisher': '출판사',
 'title': '서시'}
{'author': '달문',
 'date': '2017',
 'inventno': 3000,
 'isdn': '2222222222222',
 'page': 900,
 'publisher': '출판사',
 'title': '파이썬'}

 

1.2 객체의 특징

  • object 클래스로 객체의 레퍼런스 확인하기

오브젝트로 만드게 되면 서로 다른것을 만듬

a = object()

b = object()

print(a is b)
print(id(a), id(b))

False
134187923293648 134187923294256

 

아래와 같이 만들면 서로 같은것을 만듬

t = (1,2,3)

ts = tuple(t)

print(t is ts)
print(id(t), id(ts))

True
134187924965440 134187924965440

728x90

'PYTHON-BACK' 카테고리의 다른 글

#파이썬 기초 8일차_2  (0) 2024.07.08
#파이썬 기초 8일차_1  (1) 2024.07.08
#파이썬 기초 7일차_1  (1) 2024.07.05
#파이썬 기초 6일차_1  (0) 2024.07.04
#파이썬 기초 5일차_1  (1) 2024.07.03