Python - Class (클래스)

닉네임유저·2023년 8월 7일

Python - 기초 문법

목록 보기
11/13
post-thumbnail

Class - 클래스

클래스란 객체 지향 프로그래밍 (OOP) 기본 요소 중 하나

  • 객체 지향 프로그래밍은 현실 세계의 개념들을 프로그래밍에 반영하여 코드를 구조화 하는 방법을 제공합니다.

클래스는 몇가지 요소를 가지고 있습니다.


  • class - 객체의 속성과 메서드를 정의하는데 사용, 객체를 생성하기 위한 틀

  • instance - 클래스를 기반으로 생성된 개별 객체

  • method - 클래스에 속한 함수로 , 인스턴스에 대해 특정 동작을 수행합니다, 첫번째 매개변수로 self를 사용하여 메서드가 속한 인스턴스에 접근할 수 있습니다.

  • 속성(attributes) - 클래스의 인스턴스가 가진 데이터를 의미합니다. 객체의 상태를 나타내며 , 클래스 내부의 변수로 정의됩니다.

클래스 기본적 사용법

class 클래스 이름:

	def __init__(self):
    	인스턴스 속성1
        인스턴스 속성2
    
    def 메서드1(self):
    	내용 삽입
        
    def 메서드2(self):
    	내용 삽입

# 인스턴스 생성
my_instance = 클래스 이름(인스턴스 속성1, 인스턴스 속성2)

예제 1. 클래스 생성 - 버스

class Bus:
    # 클래스의 속성 or 변수 라고 한다.
    wheels = 4

    # 초기화 메서드
    def __init__(self, make, model, year):
        self.make = make  # 인스턴스 속성 or 변수
        self.model = model  # 인스턴스 속성 or 변수
        self.year = year  # 인스턴스 속성 or 변수
        Bus.wheels += 1

    def bus_info(self):
        return f'{self.make} 에서 만들었고 , 모델 이름은 : {self.model} 이며 , {self.year} 출시되었습니다. '


# 인스턴스 생성 - 객체
my_Bus = Bus("Jogogo", "D22", '2023')
my_Bus2 = Bus("cia","T88",'2022')

클래스의 속성에 접근하기

클래스의 변수는 직접 접근이 가능함


print(Bus.wheels)  # 2대의 버스 객체가 생성되었으므로 6이 출력된다.

클래스의 속성은 모두가 공유합니다.

print(Bus.__init__)

객체의 속성에 접근하기

print(my_Bus.make)  # Hyundai
print(my_Bus.model)  # D22
print(my_Bus.year)  # 2023

클래스의 속성 비교

print(my_Bus.make == my_Bus.year)  # 다르니까 False 출력

id값으로 속성을 확인

인스턴스의 변수는 객마다 별도로 존재한다라는 것을 확인할수 있다.

print(id(my_Bus.make))  # 둘을 비교해서 보면
print(id(my_Bus.model))  # id 값이 다르다는것을 확인

인스턴스 속성확인

print(f'{my_Bus.make} : 만든 회사 ,  {my_Bus.model} : 모델 이름  , {my_Bus.year} : 제조생성 날짜')

if 문 활용해서 비교 후 확인

if my_Bus.make == 'Jogogo':
    print('조고고 제조품이 맞습니다.')
else:
    print('다른 회사의 것 입니다.')

인스턴스를 변경시켜서 메서드 호출

info = my_Bus2.bus_info()
print(info)

인스턴스의 삭제

del my_Bus
print(my_Bus.make) # 이제 없으니까 에러가 발생합니다

self 에 대하여


  • 클래스의 내에서 사용되는 특별한 첫번째 매개변수
  • self 를 통하여 , 객체 내의 속성에 접근하고 , 객체 내의 메서드를 호출할 수 있다.
  • self 가 있으면 직접적으로 인스턴스화를 시켜줘야 호출이 가능합니다.
  • 위의 예제에서 self는 my_bus 가 self라고 생각하시면 됩니다.

init 메서드에 대하여


  • 파이썬에서 특별한 의미를 가지는 메서드 중 하나
  • 생성자(constructor) 라고도 불립니다. (생성자 함수)
  • 해당 클래스의 객체가 생성될 때 , 자동으로 호출되어 객체의 초기화를 담당
  • 객체의 속성을 초기화나 , 다른 설정을 수행하는 역할
  • init 메서드를 통해 인스턴스가 생성될 때 초기화, 인스턴스가 생성된 후에도 재정의 될 수 있습니다.

생성자 함수 및 , self에 대해 알아보기

class MyClass:
    def __init__(self):
        self.my_var = "Hi"

    def func1(self):
        print(self.my_var)

    def func2(self):
        self.my_var = "Hello, World!"
        self.func1()

    def func3():  # 매개변수를 쓰지 않고 , 메서드 생성
        print('not variable')


# self 가 있으면 직접적으로 인스턴스화를 시켜줘야 호출이 가능
my_obj = MyClass()  # 객체를 생성

self 에 의해 변경되는 부분 확인

my_obj.func1()  # 출력 Hi    func1 를 처음 호출했을때는 my_var의 초기값인 Hi 가 출력
my_obj.func2()  # 출력 Hello, World!  func2 를 호출한 후에는 my_var값이 Hello, World! 로 변경
my_obj.func1()  # 출력 Hello, World!  func1 를 다시 호출 햇을때 변경된값을 확인

MyClass.func3()  # self 가 없고, 매개변수가 없으니 직접 호출이 가능
  • self 는 클래스의 메소드에서 현재 객체의 속성이나 다른 메소드를 참조하는데 사용
  • 메소드간에 데이터를 공유하거나 메소드를 연결하는 작업이 필요
  • 독립적인 공간에 있는 속성값에 접근

예제2. 클래스를 이용해서 url 생성하기

class UrlFilter:
    def __init__(self, urls):
        self.urls = urls

    def add_https(self):
        https_urls = []
        for url in self.urls:
            if not url.startswith('https://'):
                if not url.startswith('http://'):
                    url = 'https://' + url
                else:
                    url = url.replace('http://', 'https://')
            https_urls.append(url)
        return https_urls


# URL 리스트 생성
urls = ["google.com", "http://daum.net", "naver.com", "yahoo.com"]

# UrlFilter 클래스를 사용하여 객체 생성
url_filter = UrlFilter(urls)

# https가 없는 URL에 https를 추가하는 메서드 호출
https_urls = url_filter.add_https()
print(https_urls)
profile
이것저것 다해보는 개발자

0개의 댓글