예:
class Dog: # The constructor method def __init__(self, name, breed): self.name = name # Attribute self.breed = breed # Method (function in the class) def bark(self): print(f"{self.name} says woof!") # Creating an object of the Dog class dog1 = Dog("Buddy", "Golden Retriever") dog1.bark() # Output: Buddy says woof!
여기서 Dog는 클래스(청사진)이고, dog1은 이 청사진에서 생성된 객체입니다.
캡슐화는 데이터를 안전하게 유지하고 통제된 방법을 통해서만 데이터와의 상호 작용을 허용하는 것입니다. 비공개 속성(접두사 _ 또는 __)을 사용하면 해당 속성에 직접 액세스할 수 없습니다.
예:
class BankAccount: def __init__(self, balance): self.__balance = balance # Private attribute def deposit(self, amount): self.__balance += amount def get_balance(self): return self.__balance account = BankAccount(100) account.deposit(50) print(account.get_balance()) # Output: 150
__balance는 비공개이므로 예금() 및 get_balance() 메소드를 통해서만 상호작용합니다.
상속을 통해 클래스(하위)가 다른 클래스(상위)에서 속성과 메서드를 파생할 수 있으므로 코드 재사용이 가능하고 자연스러운 계층 구조가 생성됩니다.
예:
class Animal: def __init__(self, name): self.name = name def make_sound(self): pass class Dog(Animal): def make_sound(self): return "Woof!" class Cat(Animal): def make_sound(self): return "Meow!" dog = Dog("Buddy") cat = Cat("Whiskers") print(dog.make_sound()) # Output: Woof! print(cat.make_sound()) # Output: Meow!
여기서 Dog와 Cat은 Animal을 상속합니다. 즉, 공통 속성과 동작을 공유할 수 있지만 메서드 재정의를 통해 고유한 동작도 가질 수 있습니다.
다형성을 사용하면 메소드를 호출하는 객체에 따라 메소드가 다르게 수행될 수 있습니다. 이는 각 하위 클래스가 고유한 방식으로 동작을 구현할 수 있는 하위 클래스의 메서드 재정의와 같은 경우에 유용합니다.
예:
class Shape: def area(self): pass class Square(Shape): def __init__(self, side): self.side = side def area(self): return self.side * self.side class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius * self.radius shapes = [Square(4), Circle(3)] for shape in shapes: print(shape.area())
각 도형은 동일한 메소드 이름(area())을 공유하더라도 면적을 다르게 계산합니다. 이것이 바로 다형성의 작용입니다.
추상화는 필수적인 기능만 표시하고 복잡한 세부 사항을 숨기는 데 중점을 둡니다. 이는 종종 추상 클래스 또는 인터페이스(Python의 abc 모듈 사용)를 사용하여 달성됩니다.
예:
from abc import ABC, abstractmethod class Vehicle(ABC): @abstractmethod def start_engine(self): pass class Car(Vehicle): def start_engine(self): return "Car engine started!" class Motorcycle(Vehicle): def start_engine(self): return "Motorcycle engine started!" car = Car() motorcycle = Motorcycle() print(car.start_engine()) # Output: Car engine started! print(motorcycle.start_engine()) # Output: Motorcycle engine started!
여기서 Vehicle은 start_engine을 정의하지만 구현하지 않는 추상 클래스입니다. Car 및 Motorcycle 클래스는 특정 구현을 제공하므로 각 차량 유형과 관련된 동작에만 집중할 수 있습니다.
캡슐화, 상속, 다형성, 추상화 등 OOP 원칙을 숙지하면 단순히 코드를 작성하는 것이 아닙니다. 구조, 명확성 및 효율성을 갖춘 전체 시스템을 설계하고 있습니다.
파이썬의 '멋진 건축가' 클럽에 오신 것을 환영합니다. ??"
위 내용은 실제 예제를 통해 Python의 **객체 지향 프로그래밍(OOP)** 원리와 개념을 더 자세히 살펴보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!