본문 바로가기
Python

python에서 class 사용하기

by 꿈나무 김땡땡 2022. 3. 3.
  • ​class 만드는 법을 순서대로 해본다.
  • class 내부에서는 self를 붙여줘야 한다.
  • class 설계 하다가 지금 당장 설계 못하는 부분은 pass로 우선 넣고 나중에 추가 해준다.
    • 예시: def disp(self): pass

#1 만들어보기

순서

  1. class 선언
  2. class 내부에서 def __init__(self) 선언 (초기화, 즉 초깃값 설정)
    • self: class 자기 자신을 의미
  3. class로 instance 만들기 (p = Person())

 

예시

class Person:
    def __init__(self):
    	self.name = 'ddaeng' // 초기화
        self.age = 20
        
p = Person()
print(p.name) // 'ddaeng'
print(p.age) // 20

 

#2 여러 개의 인스턴스 만들기

순서

  1. def __init__에서 name, age 매개변수 선언
  2. self.name, self.age는 name, age 매개변수 받아 주는 것으로 변경
  3. p1, p2 등 여러 개의 instance 선언
    • 선언 할 때는 초깃값을 설정해준다.

예시

class Person:
    def __init__(self, name, age):
    	self.name = name
        self.age = age
        
p1 = Person('jake', 33)
p2 = Person('tom', 21)
print(p1.name) // 'jake'
print(p2.age) // 21

 

#3 class 내부에서 함수(메소드) 만들어보기

순서

  1. class 내부에 함수(메소드) 추가하기
    • class 내부의 메소드를 만들 때는 def abc(self)와 같이 self 넣어주기
  2. class 밖에서 인스턴스 만들기
  3. 인스턴스 메소드 호출하기

예시

class Person:
    def __init__(self, name, age):
    	self.name = name
        self.age = age
        
    def disp(self):
        print(self.name, self.age)
        
p1 = Person('jake', 33)
p2 = Person('tom', 21)
p1.disp() // 'jake', 33
p2.disp() // 'tom', 21

 

#4 class 내부에서만 생성자에 접근하도록 하기

  • 목적: 클래스 안에서만 접근 가능하도록 해서 보안을 유지한다.

순서

  1. 생성자 앞에 __를 붙인다.
  2. 메소드에서 __eng로 접근한다.

예시

class Person:
    def __init__(self):
    	self.__name = 'ddaeng'
        
    def getName(self):
    	print(self.__name)
    def setName(self, name):
    	self.__name = name

p1 = Person()
p1.setName('great')
p1.getName() // 'great'
  • 실제로 getter, setter 함수 형태로 많이 사용함

참고

  • getter에 @property / setter에 @name.setter 데코레이터를 붙여주면 클래스 밖에서 name 으로 접근 가능 + 밖에서 접근할 때 getter / setter method 통해서 접근하게 된다.
class Person:
    def __init__(self):
    	self.__name = 'ddaeng'
        
    @property
    def name(self):
    	print(self.__name)

	@name.setter
    def name(self, name):
    	self.__name = name

p1 = Person()
p1.name = 'dong'
 

06_Setter 와 Getter

파이썬에서 class을 지원하기 때문에 setter/getter 또한 지원한다. 기본적으로 다음과 같이 구현할 수 있다. 메서드에 set 혹은 get을 붙이면 된다. `` ...

wikidocs.net

 

[파이썬] property 사용법 (함수/데코레이터)

Engineering Blog by Dale Seo

www.daleseo.com

 

#6 class 상속 사용하기 - 생성자 상속

순서

  1. Person 클래스 만들기
  2. Person 클래스를 상속하는 Korean 클래스 만들기
  3. Korean 클래스 안에서는 부모의 __init__ 상속 받기
  4. Korean 클래스 안에서 부모의 __init__ 외에 추가 생성자 만들기
  5. 클래스 밖에서 인스턴스 만들기
  6. 인스턴스 메소드 실행 해보기

예시

class Person:
    def __init__(self):
    	self.name = 'great'
        self.age = 20
class Korean:
	def __init__(self):
    	super().__init__()
        self.lang = 'korean'
class American:
	def __init__(self):
    	super().__init()
        self.lang = 'english'

p1=Person()
print(p1.name, p1.age) // 'great', 20

k1=Korean()
print(k1.name, k1.age, k1.lang) // 'great', 20, 'korean'

a1=American()
print(a1.name, a1.age, a1.lang) // 'great', 20, 'english'

 

 

#7 class 상속 사용하기 - 메소드 상속

순서

  1. Person 클래스 만들기
  2. Person 클래스를 상속하는 Korean 클래스 만들기
  3. Person 클래스에서 method 만들기
  4. Korean 클래스에서 Person 클래스의 method 상속 받아서 method 만들기
  5. 클래스 밖에서 인스턴스 만들기
  6. 인스턴스 메소드 실행 해보기

예시

 

class Person:
    def __init__(self):
    	self.name = 'great'
        self.age = 20
    def say(self):
    	print()
class Korean:
	def __init__(self):
    	super().__init__()
        self.lang = 'korean'
    def say(self):
    	print('안녕하세요')
class American:
	def __init__(self):
    	super().__init()
        self.lang = 'english'
    def say(self):
    	print('hello')

p1=Person()
p1.say()

k1=Korean()
k1.say() // '안녕하세요'

a1=American()
a1.say() // 'hello'​

 

#8 class 상속과 다형성

순서

  1. 실행 할 main 함수 만들기
  2. main 함수 선언하기
  3. 부모가 될 Point class 만들기
  4. 자식이 될 Rect, Circle class 만들기 (Point class 상속 받아, 필요한 생성자와 함수 추가)

예시

class Point:
  def __init__(self):
    self.x = int(input('x='))
    self.y = int(input('y='))
  def disp(self):
    pass

class Rect(Point):
  def __init__(self):
    super().__init__()
    self.w = int(input('w=')) # width
    self.h = int(input('h=')) # height
  def disp(self):
    print('사각형', self.x, self.y, self.w, self.h)

class Circle(Point):
  def __init__(self):
    super().__init__()
    self.r = int(input('r=')) # radius
  def disp(self):
    print('원', self.x, self.y, self.r)

def main():
  li=list()

  while True:
    s=input('1-사각형, 2-원, 3-조회, 4-종료: ')
    if s == '1':
      li.append(Rect())
    if s == '2':
      li.append(Circle())
    if s == '3':
      for i in li:
        i.disp()
    if s == '4':
      break
  print('프로그램을 종료합니다.')

main()

 

#9 class 변수와 instance 변수

  • class 변수: 클래스 단위로 li = [] 관리(self를 안붙이고 선언). 인스턴스 생성 마다 초기화 X
    • class명.li로 접근
  • instance 변수: 각 인스턴스 별로 self.li = [] 초기화(self를 붙이고 선언). 인스턴스 생성 마다 초기화 O
    • self.li로 접근

예시

# 인스턴스 변수: 각 인스턴스 별로 self.li = [] 초기화(self를 붙이고 선언). 인스턴스 생성 마다 초기화 O
class Person:
  def __init__(self, sp):
    self.li = [] # 인스턴스 변수
    self.li.append(sp)
  def disp(self):
    print(self.li)
  
p1=Person('milk')
p1.disp() # ['milk']

p2=Person('coke')
p2.disp() # ['coke']

p3=Person('juice')
p3.disp() # ['juice']

# 클래스 변수 : 클래스 단위로 li = [] 관리(self를 안붙이고 선언). 인스턴스 생성 마다 초기화 X
class Person:
  li = [] # 클래스 변수
  def __init__(self, sp):
    Person.li.append(sp) # Person class 내의 li에 접근
  def disp(self):
    print(Person.li)
  
p1=Person('milk')
p1.disp() # ['milk']

p2=Person('coke')
p2.disp() # ['milk', 'coke']

p3=Person('juice')
p3.disp() # ['milk', 'coke', 'juice']

 

  • 출처: https://youtube.com/playlist?list=PLz2iXe7EqJOOt1r8Io-BFAV-SHFWFKYtN 를 요약 정리 했습니다.

 

'Python' 카테고리의 다른 글

python에서 yaml 파일 사용하기  (0) 2022.01.18
vscode에서 모듈 import 안될 때  (0) 2021.08.20

댓글