Python의 객체 지향 프로그래밍
Alex Yarosh
Content Quality Analyst @ DataCamp
class Employee: def set_name(self, name): self.name = name def set_salary(self, salary): self.salary = salary def give_raise(self, amount): self.salary = self.salary + amountdef __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Use dot syntax and = to alter atributes
emp.salary = emp.salary + 5000
class Employee: def set_name(self, name): self.name = name def set_salary(self, salary): self.salary = salary def give_raise(self, amount): self.salary = self.salary + amountdef __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Use dot syntax and = to alter atributes
emp.salary = emp.salary + 5000
set_salary()만 바꿔도 emp.salary = -100은 막지 못함import pandas as pd
df = pd.DataFrame({"colA": [1,2], "colB":[3,4]})
df
colA colB
0 1 3
1 2 4
df.columns = ["new_colA", "new_colB"]
df
new_colA new_colB
0 1 3
1 2 4
# will cause an error
df.columns = ["new_colA", "new_colB", "extra"]
df
ValueError: Length mismatch:
Expected axis has 2 elements,
new values have 3 elements
df.shape = (43, 27)
df
AttributeError: can't set attribute
class Employer: def __init__(self, name, new_salary): self._salary = new_salary@property def salary(self): return self._salary@salary.setter def salary(self, new_salary):if new_salary < 0: raise ValueError("Invalid salary") self._salary = new_salary
← 데이터 저장에는 선행 _가 있는 "보호된" 속성 사용
← 제한할 속성과 같은 이름의 메서드에 @property 사용; 내부 속성 반환
← obj.attr = value 시 호출될 메서드 attr()에 @attr.setter 사용
class Employer: def __init__(self, name, new_salary): self._salary = new_salary@property def salary(self): return self._salary@salary.setter def salary(self, new_salary): if new_salary < 0: raise ValueError("Invalid salary") self._salary = new_salary
emp = Employee("Miriam Azari", 35000)
# accessing the "property"
emp.salary
35000
emp.salary = 60000 # <-- @salary.setter
emp.salary = -1000
ValueError: Invalid salary
$$\text{\Large{사용자 관점: 속성처럼 동작}}$$
$$\text{\Large{개발자 관점: 접근 제어 제공}}$$
→ @attr.setter를 추가하지 마세요
읽기 전용 속성 만들기
→ @attr.getter 추가
속성의 값을 조회할 때 호출되는 메서드에 사용
→ @attr.deleter 추가
속성을 del로 삭제할 때 호출되는 메서드에 사용
Python의 객체 지향 프로그래밍