PYTHON

[파이썬] 객체지향 프로그래밍

Jonny 2022. 5. 10. 15:54
  • 객체 지향 프로그래밍
    • 객체와 클래스
    • 파이썬에서 코딩하며 객체를 지향한다.
    • 객체 = 속성(Attribute) + 기능(Method)
    • 객체, 변수 대신 인스턴스라는 용어를 사용하기도 함
  • 클래스의 정의
    • init() 메소드를 이용한 초기화
    • self에 대하여
    • 정적 메소드와 클래스 메소드
    • 클래스 내부에게만 열려있는 프라이빗 멤버
  • 상속
    • super()
    • 다중상속
    • 오버라이딩
  • 클래스
    • 변수 : 인스턴스 변수(객체 전용)와 클래스 변수(객체 공유)
    • 인스턴스 변수 - self.변수로 초기화 하면 인스턴스 변수. 클래스로 접근은 가능하나 인스턴스가 생성 되지 않았을 때는 무의미
    • 클래스 변수 : class 이름.변수로 초기화 하면 클래스 변수. 클래스와 인스턴스로 접근 가능
    • 메소드 : 함수와 동일한 의미
      • del() : 인스턴스 삭제할 때 자동 호출(del함수), 클래스 변수를 조정할때 사용
      • len() : 인스턴스의 길이 반환(len함수)
      • repr() : 인스턴스를 객체 생성 형태의 문자열로 반환 할 때 호출 (repr함수)
      • str() : 인스턴스를 문자열로 반환 할 때 호출 (str함수)
      • 산술연산 메소드 : add(), sub(), mul(), floordiv(), truediv(), mod(), pow() (+,-,*,//,/,%,**)
      • 비교연산 메소드 : it(), le(), gt(), ge(), eq(), ne() (<,≤,>,≥,==,≠)
    • 객체의 멤버에 접근할 때 인스턴스이름.멤버, 클래스이름.멤버 이렇게 사용
    #Car 클래스
    
    num = 123      # 자료형: int, 변수: num 
    my_car = Car() # 자료형: Car 클래스, 객체: my_car
    							 # 객체명 = 클래스명()   ***new 사용안함
    
    
    #클래스 속성
    class Myclass :
        number = 100
        def inc_10(self):
            Myclass.number += 10
    
        def inc_20(self):
            Myclass.number +=20
    
    obj1 = Myclass()
    obj1.inc_10()
    print(obj1.number)
    
    obj2 = Myclass()
    obj2.inc_20()
    print(obj2.number)
    
    --------------------------
    
    #인스턴스 속성
    class MyClass :
        def __init__(self, number):
            self.number = number 
    
        def inc_10(self):
            self.number += 10
    
        def inc_20(self):
            self.number += 20
    
    obj1 = MyClass(100)
    obj1.inc_10()
    obj1.inc_20()
    print(obj1.number)
    
    obj2 = MyClass(200)
    obj2.inc_10()
    obj2.inc_20()
    print(obj2.number)
    
  • 객체지향 - 합계,사칙
#합계/평균
import math

class SumAvg :
    title = '-3과목 합계와 평균'
    def __init__(self, name, kor, eng, math):
        self.name = name
        self.kor = kor
        self.eng = eng
        self.math = math

    def getSum(self):
        sum = self.kor + self.eng + self.math
        return sum

s1 = SumAvg('김성윤',85,90,83)
print(SumAvg.title)
print('이름:%s'%s1.name)
print('국어:%d,영어:%d,수학:%d'%(s1.kor,s1.eng,s1.math))
print('합계:%d, 평균:%1f'%(s1.getSum(),s1.getSum()/3))

#실행결과
-3과목 합계와 평균
이름:김성윤
국어:85,영어:90,수학:83
합계:258, 평균:86.000000

-------------------------

#사칙연산
class Calculator :
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

    def add(self):
        return self.num1 + self.num2
    def sub(self):
        return self.num1 - self.num2
    def mul(self):
        return self.num1 * self.num2
    def div(self):
        return self.num1 / self.num2

a = int(input('첫 번째 수를 입력하세요:'))
b = int(input('두 번째 수를 입력하세요:'))
cal1 = Calculator(a,b)
print('%d - %d = %d'%(a, b, cal1.sub()))
print('%d / %d = %.1f'%(a, b, cal1.div()))

#실행결과
첫 번째 수를 입력하세요:10
두 번째 수를 입력하세요:20
10 - 20 = -10
10 / 20 = 0.5
  • 객체지향 - 생성자, 문자열
  • 상속
    • 한 클래스가 다른 클래스로부터 데이터 속성과 메소드를 물려받는 것
    class 기반 클래스 :
    	# 멤버 정의
    
    class 파생 클래스(기반 클래스)
    # 아무 멤버를 정의하지 않아도 기반 클래스의 모든 것을 물려받아 갖게 됩니다.
    	# 단, 프라이빗 멤버(__로 시작되는 이름을 갖는 멤버)는 제외입니다.
    
    class Base :
    	def base_method(self):
    			print("base_method)
    
    class Derived(Base):
    	pass
    
    base = Base()
    base.base_method()
    base_method
    derived = Derived()
    derived.base_method()
    base_method
    
    • 상속 - super()
      • super()는 부모 클래스의 객체 역할을 하는 프록시(Proxy)를 반환하는 내장함수
      • super() 함수의 반환 값을 상위클래스의 객체로 간주하고 코딩.
    • 상속 - 다중 상속
      • 다중상속은 자식 하나가 여러 부모로부터 상속을 받는 것
      • 파생 클래스의 정의에 기반 클래스의 이름을 콤마로 구분해서 쭉 적어주면 다중상속이 이루어짐
      class A :
      	pass
      class B :
      	pass
      class C :
      	pass
      class D(A, B, C) : #클래스 D는 클래스 A,B,C를 부모로부터 상속받습니다.
      	pass
      
      ---------------------
      
      class A :
      	def method(self):
      		print("A")
      
      class B(A) :
      	def method(self):
      		print("B")
      
      class C(A) :
      	def method(self):
      		print("C")
      
      class D(B,C):  #D는 B의 method()를 물려받음(먼저거를 물려받음)
      		pass
      
      
    • 상속 - 오버라이딩과 super()
    class Person() : #class Person
    	def __init__
    

'PYTHON' 카테고리의 다른 글

[파이썬] 기초 연습문제  (0) 2022.05.10
[파이썬] 예외처리  (0) 2022.05.10
[파이썬] 함수  (0) 2022.05.10
[파이썬] 파일 입출력(I/O)  (0) 2022.05.10
[파이썬] 반복문  (0) 2022.05.10