카테고리 없음

데일리 루틴 TIL 1 (24.10.01) - 예외 처리, 클래스, 메서드, 상속

sj5black 2024. 10. 1. 11:01

 

try, except, finally

try : 본문 실행

except : 에러 타입 조건으로 각종 예외처리

finally : 에러 발생 유무와 관계없이 항상 실행되는 구문

try:
    x = int(input("숫자를 입력하세요: "))
    result = 10 / x
except ValueError:
    print("유효한 숫자가 아닙니다.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
finally:
    print("프로그램 종료.")

 

Class

클래스는 속성(Attributes)과 메서드(Methods)로 구성

 

📚 클래스의 속성(Attributes)

클래스에 정의된 변수로, 객체의 데이터를 정의

📚 클래스의 메서드(Methods)

클래스에 정의된 변수로, 객체의 동작을 정의

📚 객체(Object)

클래스의 인스턴스(Instance)로, 클래스라는 설계도로부터 실제로 생성된 구체적인 데이터 기능을 가지는 실체

Dog : 클래스   my_dog : 객체  name, breed : 속성   bark() : 메서드

 

클래스 만들기

0. pass 구문 : class 이름만 정의하고 내용을 비워둘 경우 사용

1. 생성자 정의 :

def __init__(self, name, breed) :

    self.name = name

    self.breed = breed

속성은 클래스의 생성자 메서드인 __init__ 에서 정의됩니다. __init__ 메서드는 객체가 생성될 때 자동으로 호출되며, 객체의 초기 속성을 설정하는 역할을 합니다.

2. 메서드 정의 : def bark(self) : 

3. 객체 생성 : my_dog = Dog("Buddy", "Golden Retriever")

 

OOP 4대 개발 원칙

1️⃣ 캡슐화(Encapsulation)

객체의 속성과 메서드를 하나로 묶고, 일부를 외부에 감추어 객체 내부의 구현을 숨기는 원칙.

이를 통해 데이터의 무결성을 보호하고, 외부에서의 직접 접근을 제한

 

2️⃣ 상속(Inheritance)

기존 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 만드는 방법.

상속을 통해 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있으며, 이를 확장/수정 가능

 

3️⃣ 다형성(Polymorphism)

동일한 이름의 메서드가 여러 객체에서 다르게 동작할 수 있는 원칙

 

4️⃣ 추상화

복잡한 시스템을 단순화하여, 필요한 부분만 보여주고 나머지는 감추는 원칙

추상화를 통해 사용자는 객체의 내부 구현에 신경 쓰지 않고, 필요한 인터페이스만 사용 가능

 

📚 신경망 클래스 설계와 PyTorch의 활용

PyTorch와 같은 딥러닝 라이브러리에서는 클래스를 사용해 신경망을 정의하고 관리합니다. 특히, PyTorch의 nn.Module 클래스는 모든 신경망 모듈의 기본 클래스로, 사용자 정의 신경망을 만들 때 상속받아 사용합니다.

 

dir(함수) 을 실행하면, 해당 자료형이 포함하고 있는 모든 속성(Attributes)들을 조회할 수 있다.

 

__xxx__ : 매직 메서드 (ex : len(list))

xxx : 형태의 속성은 list 의 직접적인 메서드 함수로 예상 (ex : list.append() )

 

메서드(Methods)

1. 매직 메서드

Python에서 특별한 역할을 수행하는 미리 정의된 메서드. 이 메서드들은 __init__처럼 두 개의 밑줄로 시작하고 끝나며, 클래스의 특정 동작을 제어하거나 변경할 수 있습니다. 매직 메서드는 일반적으로 클래스 인스턴스의 기본 동작을 수정하거나, Python의 기본 동작을 재정의할 때 사용됩니다.

 

예시)

 

__repr__ 메서드는 해당 형태의 결과값이 그대로 클래스 객체 생성이 가능하도록 정의되어야 한다.

그 외에 매직 메서드는 기존 파이썬에서 쓰이는 기능부호들로 호출된다.

__add__ : + 연산 시 호출 // Person.__add__() 로도 사용 가능

__str__ : print 연산 시 호출  // Person.__str__() 로도 사용 가능

__eq__ :  == 연산 시 호출  // Person.__eq__() 로도 사용 가능

 

2. 클래스 메서드

 - 클래스 자체를 인수로 받는 메서드

 - @classmethod 데코레이터를 사용해 정의

 - 첫 번째 매개변수로 자기자신을 참조하는 cls 를 받음

 

3. 정적 메서드

 - @staticmethod 데코레이터를 사용해 정의

 - 첫 번째 매개변수로 self나 cls 를 받지 않음 (클래스, 객체와 무관)

 

4. 추상 메서드

 - @abstractmethod 데코레이터를 사용해 정의

 - abc.py 의 ABC 를 import 해서 사용

 - 서브클래스(자식) 에서 반드시 구현해야 하는 메서드

 

상속(Inheritance)

기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받아 사용하는 개념

 

자식 클래스(Dog) 에서 생성자를 재정의할 때, 부모 클래스의 속성(name)이 정의되지 않으면 에러

>> super().__init__(속성명) 을 통해 부모 클래스의 속성 호출