728x90
반응형
2023.01.25 - [파이썬] - 파이썬 - 클래스(1)
2023.02.08 - [파이썬] - 파이썬 - 클래스(2)
이전 게시글과 이어지는 내용이므로 참고
•추상 메서드
추상 메소드(abstractmethod)는 스스로는 객체 생성이 불가능하고, 부모 타입으로만 의미가 있다.
또 abs 메타를 상속 받아야만 사용할 수 있다. 전에 다뤘던 오버라이딩은 강제적으로 적용하는 강제성은 없지만 추상 메서드는 부모로부터 자료를 강제로 오버라이딩하는 것이라고 볼 수 있다.
즉, 강요(강조)하고 싶은 메서드를 하위 클래스에게 떠넘기는 것이라고 보면 된다.
반응형
(예시)
from abc import ABCMeta, abstractmethod
class abs(metaclass = ABCMeta): # 추상 클래스
@abstractmethod
def absmethod(self): # 추상 메서드, 반드시 오버라이딩을 해야만 객체가 생성된다.
pass
def normalmethod(self):
print('추상 클래스 내부에 존재하는 일반 메서드')
# 추상 클래스는 최소 미구현 추상메서드를 하나 이상 가진다. 위 예시에서는 pass 형태로 미구현 추상 메서드를 하나 갖고 있다.
# a = abs() # TypeError: Can't instantiate abstract class abs with abstract methods absmothod
# 객체 생성 시 에러 발생, 추상 메서드를 추가하면 객체를 생성할 때 에러가 발생한다.
class a1(abs):
data = '상속 받은 자식 클래스'
# child_1 = a1() # TypeError: Can't instantiate abstract class a1 with abstract methods absmothod
# 상속 받은 자식 클래스도 객체를 생성하면 에러가 발생한다.
class a2(abs):
data = '상속 받은 자식 클래스 그리고 오버라이딩을 수행'
def absmethod(self):
print('오버라이딩을 했다.')
def normalmethod(self):
print('추상 클래스(부모)의 일반 메서드 오버라이딩 수행')
child_2 = a2()
print(child_2.data)
child_2.absmethod()
child_2.normalmethod()
오버라이딩을 강제한다는 것을 예시를 통해 보면 쉽게 이해할 수 있다. 오버라이딩을 하지 않고 객체를 생성해서 사용하려하는 경우 에러가 발생하지만 오버라이딩 후 객체 생성을 하면 에러가 발생하지 않고 작업을 수행하는 것을 알 수 있다.
상속 받은 자식 클래스 그리고 오버라이딩을 수행 오버라이딩을 했다. 추상 클래스(부모)의 일반 메서드 오버라이딩 수행 |
•클래스의 멤버 변수(Instance) 고정하는 방법
파이썬에서 각 객체의 속성을 저장하는 방법으로 '__dict__'를 많이 사용한다. 하지만 구조로 인해 많은 메모리를 소비하게 되고 그 수가 많아진 객체로 인해 시스템에 부담이 커질 수 있다. 그래서 사용할 객체를 제한을 둘 수 있는 '__slots__'이란 것이 존재한다.
class Car:
__slots__ = ['model', 'model_year']
def show_data(self):
print(self.model, self.model_year)
c = Car()
c.model = 'spark'
c.model_year = 2014
c.show_data()
# c.mileage = 17000 # 새로운 객체 생성
# c.show_data() # 에러 발생 : AttributeError: 'Car' object has no attribute 'mileage'
del Car.model
# c.show_data()
# print(Car.model)
# 에러 발생 : del 명령어로 Car 클래스의 model 객체를 삭제했기 때문.
spark 2014 |
728x90
반응형
'파이썬(Python)' 카테고리의 다른 글
파이썬 - 내장 DB(SQL), 서버 DB(SQL) (0) | 2023.03.04 |
---|---|
파이썬 - 파일(I/O) (0) | 2023.02.25 |
파이썬 - 클래스(2) (0) | 2023.02.08 |
파이썬 - 클래스(1) (0) | 2023.01.25 |
파이썬 - 읽고 쓰기와 모듈(Module) (2) | 2023.01.19 |