Language/Python
데이터 엔지니어(아홉번째 이야기)
CleanCoder
2021. 10. 28. 19:50
절차 vs OOP
Python의 type() 을 호출하여 클래스 확인 가능
클래스는 상태와 행동에 대한 정보를 포함
# Print the mystery employee's name
print(mystery.name)
# Print the mystery employee's salary
print(mystery.salary)
# Give the mystery employee a raise of $2500
mystery.give_raise(2500)
# Print the salary again
print(mystery.salary)
실습
# Include a set_name method
class Employee:
def set_name(self, new_name):
self.name = new_name
# Create an object emp of class Employee
emp = Employee()
# Use set_name() on emp to set the name of emp to 'Korel Rossi'
emp.set_name('Korel Rossi')
# Print the name of emp
print(emp.name)
class Employee:
def set_name(self, new_name):
self.name = new_name
# Add set_salary() method
def set_salary(self, new_salary):
self.salary = new_salary
# Create an object emp of class Employee
emp = Employee()
# Use set_name to set the name of emp to 'Korel Rossi'
emp.set_name('Korel Rossi')
# Set the salary of emp to 50000
emp.set_salary(50000)
class Employee:
def set_name(self, new_name):
self.name = new_name
def set_salary(self, new_salary):
self.salary = new_salary
emp = Employee()
emp.set_name('Korel Rossi')
emp.set_salary(50000)
# Print the salary attribute of emp
print(emp.salary)
# Increase salary of emp by 1500
emp.salary = emp.salary + 1500
# Print the salary attribute of emp again
print(emp.salary)
class Employee:
def set_name(self, new_name):
self.name = new_name
def set_salary(self, new_salary):
self.salary = new_salary
def give_raise(self, amount):
self.salary = self.salary + amount
# Add monthly_salary method that returns 1/12th of salary attribute
def monthly_salary(self):
return self.salary / 12
emp = Employee()
emp.set_name('Korel Rossi')
emp.set_salary(50000)
# Get monthly salary of emp and assign to mon_sal
mon_sal = emp.monthly_salary()
# Print mon_sal
print(mon_sal)
class Employee:
# Create __init__() method
def __init__(self, name, salary = 0):
# Create the name and salary attributes
self.name = name
self.salary = salary
# From the previous lesson
def give_raise(self, amount):
self.salary += amount
def monthly_salary(self):
return self.salary/12
emp = Employee("Korel Rossi")
print(emp.name)
print(emp.salary)
class Employee:
def __init__(self, name, salary=0):
self.name = name
# Modify code below to check if salary is positive
if salary > 0:
self.salary = salary
else:
self.salary = 0
print("Invalid salary!")
# ...Other methods omitted for brevity ...
emp = Employee("Korel Rossi", -1000)
print(emp.name)
print(emp.salary)
# Import datetime from datetime
from datetime import datetime
class Employee:
def __init__(self, name, salary=0):
self.name = name
if salary > 0:
self.salary = salary
else:
self.salary = 0
print("Invalid salary!")
# Add the hire_date attribute and set it to today's date
self.hire_date = datetime.today()
# ...Other methods omitted for brevity ...
emp = Employee("Korel Rossi", -1000)
print(emp.name)
print(emp.salary)
Point 구현
# For use of np.sqrt
import numpy as np
class Point:
""" A point on a 2D plane
Attributes
----------
x : float, default 0.0. The x coordinate of the point
y : float, default 0.0. The y coordinate of the point
"""
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
def distance_to_origin(self):
"""Calculate distance from the point to the origin (0,0)"""
return np.sqrt(self.x ** 2 + self.y ** 2)
def reflect(self, axis):
"""Reflect the point with respect to x or y axis."""
if axis == "x":
self.y = - self.y
elif axis == "y":
self.x = - self.x
else:
print("The argument axis only accepts values 'x' and 'y'!")
# Create a Player class
class Player:
MAX_POSITION = 10
def __init__(self):
self.position = 0
# Print Player.MAX_POSITION
print(Player.MAX_POSITION)
# Create a player p and print its MAX_POSITITON
p = Player()
print(p.MAX_POSITION)
class Player:
MAX_POSITION = 10
def __init__(self):
self.position = 0
# Add a move() method with steps parameter
def move(self, steps):
if self.position + steps < Player.MAX_POSITION:
self.position = self.position + steps
else:
self.position = Player.MAX_POSITION
# This method provides a rudimentary visualization in the console
def draw(self):
drawing = "-" * self.position + "|" +"-"*(Player.MAX_POSITION - self.position)
print(drawing)
p = Player(); p.draw()
p.move(4); p.draw()
p.move(5); p.draw()
p.move(3); p.draw()