-
[python] 객체 지향 프로그래밍, 간단한 클래스의 정의와 활용, 내장 함수 isinstance, 매직 메소드(magic method)Languages/python 2021. 6. 5. 17:15반응형
객체 지향 프로그래밍
속성(attribute)과 행위(behaviors)로 구성된 객체를 만든 후 객체 간의 상호 작용으로 프로그래밍을 구현하는 방식
객체(object)는 무엇일까?
예를 들어 학사정보관리 시스템을 구현
학사정보관리 시스템과 관련된 현실 세계의 모든 것(thing)
- 즉, 사물과 개념이 바로 객체
즉, 학생과 교수, 교과목, 강의실 등이 모두 객체
클래스와 객체
클래스(class)
객체를 만들어 내기 위한 틀(template) 또는 설계도(blueprint)
클래스 내부는 객체들이 가져야 할 속성(attributes)과 행위(behaviors)로 구성
속성
객체의 상태를 정의
행위
객체가 취할 수 있는 행동인 절차
실제 코딩에서 속성은 변수, 행위는 클래스 내부의 함수인 메소드로 구현
객체
클래스로부터 만들어진 구체적 실체, 자신만의 고유한 속성과 메소드로 구성
객체를 클래스의 실례인 인스턴스라고도 부름
만일 자동차를 표현한 클래스 Car
실제 구체적인 차량이 바로 객체
ex)
객체1 -> car1
객체2 -> car2
...
간단한 클래스 정의와 확인
사람의 정보를 담을 클래스 person을 정의
class person:
pass
...
클래스의 다양한 정보
클래스 person을 정의
삼중 따옴표로 클래스를 설명하는 문자열을 기술
클래스 person을 내장 함수dir로 확인
위 내용 중 _dict_ 는 객체나 클래스의 속성을 저장하는데 사용되는 사전(dictionary)
클래스 person으로 살펴보면 문서화로 지정한 문자열이 키 값 '_doc_'로 지정
생성된 객체에 속성 지정
사람의 이름을 저장할 속성 name에 '홍길동'을 저장하고 출력
마침표(.)를 사용
객체의 소속된 변수나 메소드를 참조
he = person() he.name = '홍길동' print(he.name) >>> 홍길동
내장 함수 isinstance
객체의 클래스 여부를 확인
instance(객체, 클래스)는 객체가 클래스의 인스턴스 여부를 알 수 있음
print(isinstance(he,Person)) >>> True print(isinstance(she,Person)) >>> False
예제) 간단한 클래스의 정의와 활용
class Person: pass def hello(p): print("%s이 인사하네요." % p.name) Person.hello = hello he = Person() he.name = '홍길동' he.age = 26 print(he.name, he.age) he.hello() print(isinstance(he, Person)) she = Person() she.name = '김옥순' she.age = 23 print(she.name, she.age) she.hello() print(isinstance(she, Person)) =================== RESTART: C:/Users/파이썬 연습과제/sagdasfg.py ================== 홍길동 26 홍길동이 인사하네요. True 김옥순 23 김옥순이 인사하네요. True >>>
클래스 singer
메소드 introduce()
반드시 클래스 내부에서 들여쓰기가 필요
첫 인자는 반드시 self를 사용
self는 클래스 내부에서 각각의 인스턴스인 객체를 표현하는 키워드
메소드 구현에서 self.name은 객체에 지정된 속성 name을 참조
class singer: ''' 가수를 표현하는 클래스 ''' def introduce(self): print('안녕하세요: 가수 %s입니다' % self.name)
클래스 singer의 객체 iyou를 생성
메소드 구현의 첫 인자인 self는 메소드 호출 시 기술할 필요가 없는 인자
객체 자체가 self에 전달되기 때문
iyou = Singer() iyou.name = '아이유' iyou.introduce() >>> 안녕하세요! 가수 아이유입니다.
초기화 메소드 구현
초기화 메소드 __init__(self, ...)
객체를 만들 때 호출되는 특별한 메소드로, 주로 속성 값을 저장하는 초기화를 수행
class Singer: def __init__(self, name, debut): self.name = name self.debut = debut def introduce(self): print('안녕하세요! 가수%s입니다.' % self.name) def age(self): print('데뷔한지 %d년이에요!' % (2020 - self.debut + 1)) iyou = Singer('아이유',2008) iyou.introduce() iyou.age() =================== RESTART: C:/Users/파이썬 연습과제/sagdasfg.py ================== 안녕하세요! 가수아이유입니다. 데뷔한지 13년이에요! >>>
매직 메소드(magic method)
초기화 메소드 __init__() 와 같이 더블 언더스코어로 불리는 밑줄 두개인 _로 시작하고
종료하는 특수 메소드
매직 메소드인 초기화 메소드에서도 필요하면 인자에 기본값 지정 가능
예제) 더블 언더스코어가 붙은 특수 메소드
class Circle: def __init__(self,radius = 1): self.radius = radius def __str__(self): return '원 반지름: {}'.format(self.radius) def __eq__(self,other): if self.radius == other.radius: return True else: return False def setradius(self, radius): self.radius = radius def getradius(self): return self.radius def area(self): return self.radius * self.radius * 3.14 def perimeter(self): return 2 * self.radius * 3.14 c1 = Circle(10) print('원 반지름:%.2f' % c1.getradius()) print('원 면적:%.2f' % c1.area()) print('원 둘레:%.2f' % c1.perimeter()) print(c1) c2 = Circle() c2.setradius(20) c3 = Circle(10) print(c1 == c2) print(c1 == c3) =================== RESTART: C:/Users/파이썬 연습과제/sagdasfg.py ================== 원 반지름:10.00 원 면적:314.00 원 둘레:62.80 원 반지름: 10 False True >>>
외부에서 참조할 수 없는 속성과 메소드
__속성, __메소드
더블 언더스코어를 붙이면 클래스 외부에서 참조 불가능
외부 참조를 제한하는 비공개 속성과 메소드
이름에 __와 같은 제한이 없다면 public개념으로 외부에서 모두 참조 가능
속성 __GPA는 외부에서 참조할 수 없으며, 속성 name은 참조 가능
데커레이터(decorator)
정적 메소드는 메소드 헤드 문장 위에 @staticmethod를 기술
정적 메소드는 객체 뿐 아니라 클래스에서도 직접 접근
인자는 첫 번째 인자로 self 없이 실제로 필요한 인자를 기술
데커레이터 @classmethod로 정의하는 클래스 메소드
class Shape: PI = 3.141592 @classmethod def circlearea(cls, r): return r * r * cls.PI @staticmethod def circleperimeter(r): return 2 * r * Shape.PI print('%.2f' % Shape.circlearea(3.2)) print('%.2f' % Shape.circleperimeter(3.2)) s = Shape() print('%.2f' % s.circlearea(2.8)) print('%.2f' % s.circleperimeter(2.8)) =================== RESTART: C:/Users/파이썬 연습과제/sagdasfg.py ================== 32.17 20.11 24.63 17.59 >>>
반응형'Languages > python' 카테고리의 다른 글
[python] 파이썬을 이용한 빅데이터 실습1 - Series (2) 2021.09.12 [python] 상속과 클래스 (0) 2021.06.05 [python] 파일 쓰기 write()와 읽기read()/ 파일 열기 함수 open() /파일 읽기 readlines()와 readline()/ 파일 읽기의 예외 처리/ mode='x'/바이너리 (0) 2021.05.30 [python] 실행 오류 및 파일을 다루는 예외 처리와 파일 입출력 (0) 2021.05.26 [python] tutle/numpy 를 이용한 다양한 예제들 (0) 2021.05.26