매직 메서드(Magic Methods)
특별한 역할을 수행하는 미리 정의된 메서드
__init__
처럼 두개의 underbar로 시작하고 끝남
클래스의 특정 동작을 제어, 변경할 수 있다.
-> 일반적으로 클래스 인스턴스의 기본 동작 수정, Python의 기본 동작을 재정의할 때 사용
#__init__
#객체가 생성될 때 호출되는 생성자 메서드, 객체의 초기화 담당
def __init__(self, name, age):
self.name = name
self.age = age
#__repr__
#객체의 '공식적인' 문자열 표현 반환 메서드, 주로 디버깅 위해 사용 (개발자용)
def __repr__(self):
return f"Person('{self.name}',{self.age})"
#__add__
#객체 간의 덧셈 연산 정의 메서드, + 연산자 재정의 가능
def __add__(self, other):
return self.age + other.age
a = 10
print(a.__add__(4)) # 14
#__eq__
#두 객체가 같은지 비교하는 메서드, == 연산자 재정의
def __eq__(self, other):
return self.name == other.name and self.age == other.age
#__str__
#객체의 문자열 표현 반환 메서드, 주로 사용자에게 표시할 때 의미 있는 정보를 간결하게 제공
#사람이 읽기 쉽게! (사용자용)
def __str__(self):
return f"{self.name}는 {slef.age}살 입니다."
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}는 {self.age}살입니다."
def __add__(self, other):
return self.age + other.age
#객체 생성
person1 = Person("Alice",30)
person2 = Person("Bob", 25)
#__str__메서드 호출
print(person1)
print(person2)
#__add__메서드 호출
print(person1+person2)
클래스 메서드(Class Method)
클래스 자체를 인수로 받는 메서드
클래스 변수를 다루거나 클래스 자체에 대한 작업 수행할 때 사용
@classmethod 데코레이터 사용하여 정의
첫번째 매개변수로 cls를 받음
cls는 클래스 '자신'을 참조
class MyClass:
class_variable = 0 #클래스를 대표하는 변수
@classmethod
def increment(cls):
cls.class_variable += 1
#클래스 메서드 호출
MyClass.increment()
print(MyClass.class_variable) #1
#increment 메서드는 클래스 변수 class_variable의 값을 증가 시킴(이 메서드는 객체가 아닌 클래스 자체에서 호출=> 매개변수)
MyClass.increment()
print(MyClass.class_variable) #1에서 값을 1증가시켜 2가 되고, 2 print
a = MyClass()
print(a.class_variable) #a라는 MyClass의 객체 생성, class_variable(변수) 공유함 따라서 2출력
MyClass.increment()
print(MyClass.class_variable) #3
b = MyClass()
print(b.class_variable) #3
=> 어떤 하나의 객체에서 값을 바꿔버리면 전체가 영향을 받음, 주의필요
print(a.class_variable) #4
a.increment() #4
b.increment() #5
print(b.class_variable) #5
정적 메서드(Static Methods)
클래스나 객체와는 관련이 없지만 클래스의 맥락에서 의미가 있는 메서드
@staticmethod 데코레이터 사용하여 정의
첫번째 매개변수로 self나 cls를 받지 않음
클래스의 일부로 포함되어야 하는, 그러나 객체의 상태나 클래스의 상태와 무관한 기능을 수행할 때 유용
class MathUtils:
@staticmethod
def add(x, y): # x와 y는 클래스나 인스턴스의 속성이 아님
return x + y
- 정적 메서드 (@staticmethod): 클래스와 인스턴스 상태에 접근하지 않는 독립적인 함수.
- 클래스 메서드 (@classmethod): cls를 매개변수로 받아 클래스를 참조하고, 클래스 변수를 다루는 메서드.
- 인스턴스 메서드: self를 매개변수로 받아 객체 인스턴스를 참조하고, 인스턴스 변수를 다루는 일반 메서드.
class Dog:
def __init__(self, name):
self.name = name # 인스턴스 속성
def bark(self): # 인스턴스 메서드
return f"{self.name} says woof!"
# 인스턴스 생성 및 메서드 호출
dog = Dog("Buddy")
print(dog.bark()) # 출력: Buddy says woof!
상속(Inheritance), 기본구조
기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받아 사용하는 개념
상속을 통해 재사용성 높이고, 기존 기능을 확장하거나 수정가능
=> 코드 재사용, 유지보수성, 확장성
class ParentClass:
#부모 클래스의 내용
class ChildCalss(ParentClass):
#자식 클래스의 내용(부모 클래스의 속성과 메서드를 상속받음)
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "소리를 냅니다."
class Dog(Animal): #Animal 클래스를 상속받아 Dog 클래스 정의
def speak(self): #부모 클래스의 메서드를 재정의(오버라이딩)
return f"{self.name}가 멍멍 짖습니다."
#객체 생성
dog = Dog("Buddy")
print(dog.speak())
#Dog클래스는 Animal클래스를 상속받아서 name속성, speak메서드 물려받음
#Dog클래스는 speak메서드를 오버라이딩(재정의)하여 고유한 동작을 정의
↓↓↓↓↓↓↓↓↓↓↓↓ 응용코드 ↓↓↓↓↓↓↓↓↓↓↓↓
class human:
def __init__(self,name,age):
self.name = name
self.age = age
def __repr__(self):
return f"human('{self.name}',{self.age})"
def __add__(self,other):
print(self.name + other.name)
print(self.age + otehr.age)
def __eq__(self, other):
if self.name == other.name:
print("동일 이름입니다.")
else:
print("다른 이름입니다.")
def __str__(self):
return f"{self.name}은 {self.age}살입니다."
class Animal:
def __init__(self, name):
self.name = name
print("부모의 생성자입니다.")
def speak(self):
return "소리를 냅니다."
def test(self):
return "동물이네요."
class Dog(Animal): #Animal클래스를 상속받아 Dog클래스 정의
def __init__(self, name, age):
super().__init__(name)
self.age = age
def speak(self): #부모 클래스의 메서드 재정의(오버라이딩)
return f"{self.name}가 멍멍 짖습니다."
dog = Dog("Buddy", 31)
print(dog.speak())
# abc모듈사용, 추상 클래스 & 추상 메서드
from abc import ABC, abstractmethod
class Animal(ABC): #ABC를 상속받아 추상 클래스 정의
@abstractmethod #무조건 자식 클래스에서 아래 정의한 기능 구현해줘야함
def sound(self): #추상 메서드로 선언
pass
class Dog(Animal):
def __init__(self,name):
self.name = name
def sound(self): #추상 메서드 구현
print("멍멍이는 멍멍")
dog_bob.sound() #출력 : 멍멍이는 멍멍
'Python to AI' 카테고리의 다른 글
Decorator, Context Manager (0) | 2024.11.14 |
---|---|
Iterator, Generator (3) | 2024.11.14 |
File Objects - file mode, file method (0) | 2024.11.13 |
객체지향 프로그래밍(Object-Oriented Programming, OOP), - Object, Class, Instance, Attributes, Methods (0) | 2024.11.11 |
Python 애증의 비트연산자 (0) | 2024.10.30 |