Python(파이썬) 객체지향

안요한·2022년 5월 18일
0

Python 기초

목록 보기
7/8
  • 객체 지향 프로그래밍
    • 객체와 클래스
    • 파이썬에서 코딩하며 객체를 지향한다.
    • 객체 = 속성(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__
profile
걍이렇게돼브렀다리

0개의 댓글