Python Class

‎yeon·2023년 2월 13일
0
post-thumbnail

Python Class

1. 객체(Object)

🦄객체(Object)란? : 존재하는 모든 것을 의미하며 객체 간의 상호작용으로 사건이 발생함. 객체는 속성(attribute)과 기능(method)을 가지고 있음

객체 지향 프로그래밍(Object Oriented Programming) : 프로그램을 객체 단위로 구분함. 객체들 간의 상호작용을 통해 메세지를 주고 받으며 데이터를 처리하는 방식.

2. Class : 객체를 정의하는 설계도

class Name(object):
  • class : 클래스 정의
  • Name : 클래스 이름
  • object : 상속 받는 객체명
class BOOK():
	title = ""
    author = ""
    publisher = ""
    
book = BOOK()

book = BOOK() : BOOK는 Class이고, book는 intance. book이라는 instance를 생성하여 메모리에 할당하는 과정.

3. Attribute

속성에는 클래스 속성과 인스턴스 속성 두 가지 종류가 있음. 클래스 속성은 모든 인스턴스가 공유하여 전체가 사용하는 값을 저장할 때 사용하며 인스턴스 속성은 인스턴스 별로 독립되어 있어 각 인스턴스 마다 다른 값을 저장할 때 사용함.

Class Attribute
class Name:
    attribute = value

class 바로 아래에 클래스 속성을 정의할 수 있음.
이때, title이 Book 클래스의 클래스 속성임. 클래스 속성은 클래스에 속해 있으며 모든 인스턴스에서 공유하는 것을 알 수 있음.

self.title = title에서 self는 현재 인스턴스를 의미하기 때문에 'Book.title = title'로 바꾸는 것이 더 명확한 표현임.

class Book:
  title = ""

  def get_title(self, title):
    Book.title = title

Python에서 속성 및 method의 이름을 찾을 때, instance -> class 순으로 찾음. 따라서 instance 속성이 없다면 class 속성을 찾게 되어 겉보기에 instance 속성을 사용하는 것 같아도 class 속성임.

Instance Attribute

인스턴스 속성은 서로 영향을 주지 않음.

비공개 클래스 속성

__attribute와 같이 __로 비공개 속성을 생성할 수 있음. 이러한 비공개 속성은 클래스 안에서만 접근 가능하며 외부에서 접근 불가능함.

4. Class Magic Methods

5. Class Inheritance

클래스 상속은 한 클래스에서 다른 클래스로 기능을 물려주는 것을 말함. 이때 상속받은 클래스는 물려받은 기능을 유지하고 다른 기능을 추가할 수 있음. 상속으로 중복된 method를 재정의할 필요가 없다는 장점이 있음.

Base Class : 기능을 물려주는 기반 클래스로 부모 클래스(parent class), 슈퍼 클래스(super class)라고 함.
Derived Class : 상속 받아 새롭게 만드는 클래스. 자식 클래스(child class), 서브 클래스(sub class)라고 부름.

class SuperClass:
	pass
    
class SubClass:
	pass
class Vehicle:
	def transport(self):
    	print("transport")
    
class Subway(Vehicle):
	def fare(self):
    	print('2$')
        
subway = Subway()
subway.transport()
subway.fare()

Subway 클래스에 transport method가 없지만 Vehicle을 상속받았기 때문에 호출가능.

Super Class의 속성 사용하기

super()을 사용하여 super class의 __init__ method를 호출하여 super class 초기화하여 오류를 막을 수 있음.

6. Method Overriding

부모 클래스로부터 상속받은 특정 메서드를 자식 클래스에서 재정의하는 작업을 의미함.


예시

1. 다음 코드가 동작하도록 클래스 정의하기
>> car = Car(2, 1000)
>> car.wheel
2
>> car.price
1000


car = Car(2, 1000) instance에 Class Car을 할당할 때, 두 개의 인수(wheel, price)를 받아야 하므로 생성자 __init__(self, wheel, price)를 정의한다.

2. 클래스 상속하기
>> bicycle = Bicycle(2, 100)
>> bicycle.price
100

0개의 댓글