Python 중급 객체 지향 프로그래밍
Jake Roach
Data Engineer
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
self.height = 0
# This invokes a call to __init__
john = Person("John Casey", 38)
class 키워드로 클래스 정의__init__는 생성자이며 새 객체 생성 시 호출됨self는 현재 인스턴스를 참조class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Create an instance of Person
sarah = Person("Sarah Walker", 31)
sarah.age # Retrieve the age instance attribute
self.<attribute-name> 구문으로 설정/조회<object-name>.<attribute-name>로 접근class Person:
residence = "Planet Earth"
...
# Accessed without an instance
print(Person.residence)
Planet Earth
class Person:
...
def introduce(self):
print(f"Hello, my name is {self.name}")
chuck = Person("Chuck", 32)
chuck.introduce() # Called on a Person object
$$
self 사용class Person:
@classmethod
def wake_up(cls):
print("Time to start your day!")
# Calling a class method
Person.wake_up()
$$
@classmethod 데코레이터 사용상속은 클래스 간 코드 재사용을 가능하게 합니다
Employee)는 부모 클래스(Person)의 모든 기능을 상속class Person:
def __init__(self, name, age):
self.name
self.age = age
def introduce(self):
print(f"Hello, my name is {self.name}")
class Employee(Person):
def __init__(self, name, age, title):
Person.__init__(self, name, age)
self.title = title
def change_position(self, new_title):
self.title = new_title
lester = Employee("Lester", 26, "Technician")
lester.introduce() # Inherited from Person
print(lester.title)
Hello, my name is Lester
Technician
lester.change_position("Cashier")
print(lester.title)
Cashier
class Employee(Person):
def __init__(self, name, age, title):
# Uses name of the parent class
Person.__init__(self, name, age)
self.title = title
...
__init__()super() 사용
class Employee(Person):
def __init__(self, name, age, title):
# 클래스명 대신 super()
super().__init__(name, age)
self.title = title
...
super(), __init__()self를 전달할 필요 없음자식이 부모에게서 상속한 메서드를 새 방식으로 구현합니다
class Employee(Person):
...
def introduce(self):
print(f"""My name is {self.name},
I am a {self.title}""")
lester = Employee("Lester", 26, "Technician")
lester.introduce()
My name is Lester, I am a Technician
class Person:
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other.name
$$
__eq__()는 == 오버로딩에 사용$$
$$
$$
$$
# Compare two Person objects
chuck = Person("Charles Carmichael")
charles = Person("Charles Carmichael")
print(chuck == charles)
True
Python 중급 객체 지향 프로그래밍