클래스

2022. 10. 9. 12:26Dev.Program/Python & R

728x90

책 183p

======== test5.py

< 클래스 >

원래 인터프리터 언어에는 클래스가 없지만 파이썬에는 조금 들어있다(많이는 없음)

< 기본 문법 >

class 클래스이름:
     주제 변수1
     주제 변수2
     주제 처리 함수1
     주제 처리 함수2

# 객체 생성
# 변수 = 클래스 이름()



class Simple:
      pass # 클래스 형태만 만들어짐
  • pass 적으면 클래스 형태만 만들어짐
class Simple:
      s="변수"
      def prn(self):
          print("함수정의")
      def sum2(self, a, b):
          return a+b
  • 클래스 내의 함수 self 자동으로 붙음 (그냥 함수와 구분)

> 객체 생성해서 함수호출해보기

a = Simple() # 객체생성
print(a.s) # 변수호출
a.prn() # 함수호출
print(a.sum2(1, 2)) # 함수호출

 

< 초기값 설정 >

  • 내장함수 init()
  • 클래스 안에 미리 만들어져있는 내장함수를 통해 초기값 설정
# 초기값 설정
class Person:
      # 초기값 함수(클래스 안에 있는 내장함수)
      def __init__(self, name, age): # 값을 받는 매개 변수
          # self.name 인스턴스 멤버변수(객체를 생성해야 사용할 수 있는 변수/함수)
          self.name = name
          self.age = age
      def intro(self):
          print("이름 :", self.name, "나이 :", self.age)

p = Person("지니", 18)
p.intro()
# 클래스 FourCal2     초기값 a, b 받아서 sum함수 a,b 더한값 리턴
#                     sub함수 a,b 뺀값 리턴, mul함수 a,b 곱한값 리턴
#                     div함수 a,b 나눈값 리턴
class FourCal2:
      def __init__(self, a, b):
          self.a = a
          self.b = b
      def sum(self):
          return self.a + self.b
      def sub(self):
          return self.a - self.b
      def mul(self):
          return self.a * self.b
      def div(self):
          return self.a / self.b

# 객체 생성 메서드 호출
fc = FourCal2(30, 20)
print(fc.sum())
print(fc.sub())
print(fc.mul())
print(fc.div())

 

< 클래스 상속 >

# 클래스 상속
class Parent:
   def parent_prn(self):
       print("부모클래스 prn()함수")

class Child(Parent): # Parent 상속
   def child_prn(self):
       print("자식클래스 prn()함수")
  • 상속받을 땐 부모클래스를 괄호안에 넣는다
# Child 객체생성   parent_prn()  child_prn() 메서드 호출
c = Child()
c.parent_prn()
c.child_prn()
class Child(Parent): # Parent 상속
   def child_prn(self):
       print("자식클래스 prn()함수")
   # 메서드 오버라이딩: 부모메서드 재정의
   def parent_prn(self):
       print("메서드 오버라이딩!")
# Child 객체생성   parent_prn()  child_prn() 메서드 호출
c = Child()
c.parent_prn()
c.child_prn()
  • 메서드 오버라이딩 시 출력결과 달라짐

 

# Bicycle 클래스
# 초기값 color 받아 멤버변수 color 변수에 저장
#  move 함수   출력 color
class Bicycle:
      def __init__(self, color):
          self.color = color
      def move(self, speed):
          print("자전거 색 :", self.color, "자전거 속도 :", speed)

class FoldingBicycle(Bicycle):
      def fold(self):
          print(self.color, "색 자전거 접기")

f = FoldingBicycle("노랑") # 상속받았을 땐 부모초기값 입력 필수!
f.move(30)
f.fold()

> 파이썬은 다중 상속이 가능

 

< 클래스 안에 내장함수 >

# 클래스 안에 내장함수 __add__
#                                      부모클래스 + 자식클래스(add 함수호출)
#                                      __sub__
#                                      부모클래스 - 자식클래스(sub 함수호출)

 

# 부모클래스 HousePark
# 멤버변수 lastname = "박"
# 초기값 name 받아서 self.fullname = self.lastname + name
# 함수정의 travel(where) 출력  self.fullname 이 where 여행가다
class HousePark:
   lastname = "박"
   def __init__(self, name):
       self.fullname = self.lastname + name
   def travel(self, where):
       print(self.fullname, "이", where, "여행가다")

# 자식클래스 HouseKim 상속 HousePark
# 멤버변수 lastname = "김"
# 함수 재정의 travel(where, day) 출력  self.fullname 이 where에 day일 여행가다
class HouseKim(HousePark):
   lastname = "김"
   def travel(self, where, day):
       # 부모메서드 호출
       super().travel("강원도")
       print(self.fullname, "이", where, "에", day, "일 여행가다")

# HouseKim 객체생성
# travel() 함수 호출
hk = HouseKim("멍멍")
hk.travel("지니네", 30)

 

class HousePark:
   lastname = "박"
   def __init__(self, name):
       self.fullname = self.lastname + name
   def travel(self, where):
       print(self.fullname, "이", where, "여행가다")
   def __add__(self, other): # other 다른클래스(자식클래스)
       print(self.fullname, "와", other.fullname, "여행지에서 만나다")
   def __sub__(self, other):
       print(self.fullname, "와", other.fullname, "여행지에서 헤어지다")

class HouseKim(HousePark):
   lastname = "김"
   def travel(self, where, day):
       # 부모메서드 호출
       super().travel("강원도")
       print(self.fullname, "이", where, "에", day, "일 여행가다")

# 부모클래스 HousePark 객체생성
hp = HousePark("야옹")

# HouseKim 객체생성
# travel() 함수 호출
hk = HouseKim("멍멍")
hk.travel("지니네", 30)

# __add__ 함수호출
hp + hk
# __sub__ 함수호출
hp - hk
  • 추가 부분!



728x90