All About Python 08

Jacob Kim·2024년 1월 8일
0

Datascience Dictionary

목록 보기
12/14
post-thumbnail

객체와 클래스

객체(Object)

객체 지향 프로그래밍(Object Oriented Programming)

클래스(Class)

Book 클래스 정의

클래스 이름: Book

속성

  • 저자: author
  • 책 이름: name
  • 출판사: publisher
  • 발행일: date
class Book(object):
  author = ""
  title = ""
  publisher = ""
  date = ""
book = Book()
book.author = "Minjun"
print(book.author)
book.title = "Python Programming for machine Learning"
print(book.title)
#Minjun
#Python Programming for machine Learning

Book 클래스 메소드 정의

메소드

  • 책 정보 출력: print_info(self)
  • self가 있어야만 실제로 인스턴스가 사용할 수 있는 메소드로 선언
  • print_info(self)에서 self는 실제적으로 book 인스턴스를 의미
  • 메소드 안에서 속성 값을 사용하지 않을 경우에는self 생략 가능
class Book(object):
  author = ""
  title = ""
  publisher = ""
  date = ""
 def print_info(self): #book instance
    print("Author:", self.author)
    print("Title:", self.title)
book = Book()
book.author = "Minjun"
book.title = "Python Programming for machine Learning"
book.print_info()
#Author: Minjun
#Title: Python Programming for machine Learning

인스턴스 속성(Instance Attribute)

Book 인스턴스 속성

Book 클래스에서 생성된 인스턴스 b1에서 속성을 활용

class Book(object):
  author = ""
  title = ""
  publisher = ""
  date = ""
  def print_info(self): #book instance
    print("Author:", self.author)
    print("Title:", self.title)
    print("Publisher:",self.publisher)
    print("Date:", self.date)
b1 = Book()
b1.author = "Minjun"
b1.title = "Python Programming for web"
b1.publisher = "Danny Prok"
b1.date = "2024"
b1.print_info()
#Author: Minjun
#Title: Python Programming for web
#Publisher: Danny Prok
#Date: 2024

클래스 속성(Class Attribute)

클래스 속성은 클래스 자체에서 사용되는 속성

Book 클래스 속성

Book 클래스 자체에서 사용되는 속성

class Book(object):
  author = ""
  title = ""
  publisher = ""
  date = ""
  def print_info(self): #book instance
    print("Author:", self.author)
    print("Title:", self.title)
    print("Publisher:",self.publisher)
    print("Date:", self.date)
b1 = Book()
Book.author = "Minjun"
Book.title = "Python Programming for web"
Book.publisher = "Danny Prok"
Book.date = "2024"
b1.print_info()
#Author: Minjun
#Title: Python Programming for web
#Publisher: Danny Prok
#Date: 2024

인스턴스 속성과 클래스의 속성의 활용

인스턴스 속성과 클래스 속성을 목적에 맞도록 나누어서 활용

Book 인스턴스 속성과 클래스 속성

인스턴스 속성

  • 저자: author
  • 제목: title
  • 출판사: publisher
  • 발행일: date

클래스 속성

  • 수량: count
class Book(object):
  author = ""
  title = ""
  publisher = ""
  date = ""
  count = 0
  def print_info(self): #book instance
    print("Author:", self.author)
    print("Title:", self.title)
    print("Publisher:",self.publisher)
    print("Date:", self.date)
b1 = Book()
Book.count += 1
b1.author = "Minjun"
b1.title = "Python Programming for web"
b1.publisher = "Danny Prok"
b1.date = "2024"
b1.print_info()
print("Numbers of Books : ", str(Book.count))
#Author: Minjun
#Title: Python Programming for web
#Publisher: Danny Prok
#Date: 2024
#Numbers of Books :  2

클래스 매직 메소드(Class Magic Methods)

__init__()

__init__() 메소드를 이용하여 클래스의 속성들을 초기화

class Book(object):
  count = 0
  def __init__ (self, author, title, publisher, date):
    self.author = author
    self.title = title
    self.publisher = publisher
    self.date = date
    Book.count += 1
  def print_info(self):
    print("Author:", self.author)
    print("Title:", self.title)
    print("Publisher:",self.publisher)
    print("Date:", self.date)
book = Book("Minjun", "Python Programming for ML", "ML Project", "2024" )
book.print_info()
print("Number of Books", str(Book.count))
#Author: Minjun
#Title: Python Programming for ML
#Publisher: ML Project
#Date: 2024
#Number of Books 3

__str__()

__str__() 메소드를 이용하여 인스턴스 출력

class Book(object):
  count = 0
  def __init__ (self, author, title, publisher, date):
    self.author = author
    self.title = title
    self.publisher = publisher
    self.date = date
    Book.count += 1
  #def __str__(self):  #2020 버전에서는 가능
  #return ("Author:", self.author + \
  #"\nTitle:", self.title + \
  #"\nPublisher:",self.publisher + \
  #"\nDate:", self.date)
  def __str__(self): #2024 버전에서는 이 기능을 지원하는 것 같다.
    return f"{self.author} +, {self.title}, {self.publisher}, {self.date}, {Book.count}"
book = Book("Minjun", "Python Programming for ML", "ML Project", "2024" )
print(book)
print("Number of Books", str(Book.count))
#Minjun, Python Programming for ML, ML Project, 2024, 1
#Number of Books 1

매직 메소드 예제

Line 클래스

class Line(object):
  length = 0
#
  def __init__(self, length):
    self.length = length
    print(self.length, "길이의 선 생성")
#
  def __del__(self):
    print(self.length, "길이의 선 제거")
#
  def __repr__(self):
    return str(self.length)
#
  def __add__(self, other):
    return self.length + other.length
#
  def __It__(self, other):
    return self.length < other.length
#
  def __le__(self, other):
    return self.length <= other.length
#
  def __gt__(self, other):
    return self.length > other.length
#
  def __ge__(self, other):
    return self.length >= other.length
#
  def __eq__(self, other):
    return self.length == other.length
#
  def __ne__(self, other):
    return self.length != other.length
l1 = Line(10)
print(l1)
#
l2  = Line(20)
print(l2)
#
print("선의 합:", l1+l2)
#
if l1 < l2:
  print(l1, '<', l2)
elif l1 <= 12:
  print(l1, '<=', l2)
elif l1 > l2:
  print(l1, '>', l2)
elif l1 >= l2:
  print(l1, '>=', l2)
elif l1 == l2:
  print(l1, '==', l2)
elif l1 != l2:
  print(l1, '!=', l2)
else:
  pass
#
del(l1)
del(l2)
#10 길이의 선 생성
#10
#20 길이의 선 생성
#20
#선의 합: 30
#10 < 20
#10 길이의 선 제거
#20 길이의 선 제거
#10 길이의 선 제거
#20 길이의 선 제거

가시성 예제
__items 속성은 Box 객체 외부에서 보이지 않도록 캡슐화와 정보 은닉이 가능
외부에서 __items 속성에 접근하면 속성 오류 발생

class Box(object):
  def __init__(self, name):
    self.name = name
    self.__items = []
#
  def add_item(self, item):
    self.__items.append(item)
    print("아이템 추가")
#
  def get_number_of_item(self):
    return len(self.__items)
box = Box("Box")
box.add_item("Item1")
box.add_item("Item2")
print(box.name)
print(box.get_number_of_item())
#print(box.__items)
#아이템 추가
#아이템 추가
#Box
#2

클래스 상속(Class Inheritence)

class SuperClass(object):
  pass
#
#
class SubClass(SuperClass):
  pass

메소드 오버라이딩(Method Overriding)

class SuperClass(object):
  def method(self):
    pass
#
#
class SubClass1(SuperClass):
  def method(self):
    print("Method Overriding")
#
class SubClass2(SuperClass):
  pass
sub1 = SubClass1()
sub2 = SubClass2()
#
sub1.method()
sub2.method()
#Method Overriding

클래스 상속, 메소드 오버라이딩 예제

  • Vehicle 클래스를 상속받아 Car 클래스와 Truck 클래스 생성
  • Car 클래스와 Truck 클래스는 up_speed 메소드를 오버라이딩
  • Car 클래스는 속도가 240 초과되면 240으로 조정
  • Truck 클래스는 속도가 180 초과되면 180으로 조정
class Vehicle(object):
  speed = 0
  def up_speed(self, value):
    self.speed += value
#
  def down_speed(self, value):
    self.speed -= value
#
  def print_speed(self):
    print("Speed:", str(self.speed))
#
class Car(Vehicle):
    def up_speed(self, value):
      self.speed += value
      if self. speed > 240: self.speed = 240
#
class Truck(Vehicle):
    def up_speed(self, value):
      self.speed += value
      if self.speed > 180: self.speed = 180
car = Car()
car.up_speed(300)
car.print_speed()
#
truck = Truck()
truck.up_speed(200)
truck.print_speed()
#Speed: 240
#Speed: 180
profile
AI, Information and Communication, Electronics, Computer Science, Bio, Algorithms

0개의 댓글