Languages/Python

[워니 파이썬 기초] #4 클래스, 오브젝트

성중 2021. 2. 19. 20:22

#클래스

-함수+변수

 

#오브젝트

-클래스를 통해 생성 ex) 클래스-> 빵틀, 오브젝트 -> 빵

-오브젝트(object) = 인스턴스(instance)

 

*self: 클래스 객체 표현, init함수와 연결할 때 활용

 

* . (점찍기): 객체 변수 접근

오브젝트 명칭+점 찍기+클래스의 속성(함수)입력 -> 오브젝트 출력

p.say_hello() #~클래스에서 say_hello라는 속성(함수)을 p라는 오브젝트로 출력
p.say_hello("성중") #~변수를 적용시켜 출력 가능!

‘Person’이라는 클래스를 만들어보자. (우선 변수 없이 함수 하나만 가진 클래스)

class Person:
  def say_hello(self):
    print("안녕!")

‘p’라는 오브젝트를 만들어보자.

p=Person()   #~클래스와 오브젝트를 연결
p.say_hello()   #~오브젝트 출력

-> 안녕!

‘Person’클래스에 변수를 넣어보자.

class Person:
  name="성중"

  def say_hello(self):
    print("안녕! 나는"+self.name)

다시 p를 출력하면?

p=Person()
p.say_hello()
-> 안녕! 나는 성중

여기서 계속 name을 바꿔가면서 출력될 수 있는 클래스를 짜보자!

우선 오브젝트들을 만들어보자.

sungjoong = Person()
michael = Person()
jenny = Person()

name변수를 “성중”으로 고정 시키지 않고 오브젝트를 만들 때 새로 이름이 할당되도록 해보자.

 

*init함수: ‘__init__()’으로 표현

initialize(초기화)의 약자, 오브젝트 만들 때 마다 할당

오브젝트를 만들 때마다 init안의 인자를 받아서 변수에 인자를 적용함

class Person:
  def __init__(self, name):   #~name이 클래스의 오브젝트마다 새로 할당
    self.name=name          

  def say_hello(self):
    print("안녕! 나는"+self.name)

sungjoong = Person("성중")   #~클래스와 오브젝트를 연결
michael = Person("마이클")
jenny = Person("제니")

sungjoong.say_hello()   #~오브젝트 출력
michael.say_hello()
jenny.say_hello()

-> 안녕! 나는성중
   안녕! 나는마이클
   안녕! 나는제니


say_hello()에 인자를 추가해보자,, to_name에게 인사하도록

class Person:
  def __init__(self, name):
    self.name=name

  def say_hello(self, to_name):
    print("안녕! " + to_name + " 나는 "+self.name)

sungjoong = Person("성중")
michael = Person("마이클")
jenny = Person("제니")

sungjoong.say_hello("마이클")
michael.say_hello("제니")
jenny.say_hello("성중")

-> 안녕! 마이클 나는 성중
   안녕! 제니 나는 마이클
   안녕! 성중 나는 제니

init함수에 ‘나이’인자를 추가하고 새로운 함수를 짜보자!

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def say_hello(self, to_name):
    print("안녕! " + to_name + " 나는 "+self.name)
  
  def introduce(self):
    print("내 이름은 " + self.name + " 그리고 나는 " + str(self.age) + "살이야.")

sungjoong = Person("성중", 21)

sungjoong.introduce()

-> 내 이름은 성중 그리고 나는 21살이야.

#상속(inheritance):공통된 클래스를 기본으로 깔고 그 밑에 세부 클래스를 만들 때

 

앞선 Person클래스를 기본으로 Police클래스와 Programer클래스를 씌워 보자!

class Police(Person):   #~Police클래스가 Person클래스를 상속
  def arrest(self, to_arrest):
    print("넌 체포됐다. " + to-arrest)

class Programmer(Person):   #~Programmer클래스가 Person클래스를 상속
  def program(self, to_program):
    print("다음엔 뭘 만들지? 아, " + to_program + "! 이걸 만들어야겠다.")

각각 클래스에 오브젝트를 만들어주자!

sungjoong = Person("성중", 21)
jenny = Police("제니", 23)
michael = Programmer("마이클", 22)

Person클래스를 상속해 introduce()속성도 적용됨, 동시에 세부 클래스 속성 적용

jenny.introduce()
jenny.arrest("성중")

michael.introduce()
michael.program("이메일 클라이언트")

-> 내 이름은 제니 그리고 나는 23살이야.
   넌 체포됐다. 성중
   내 이름은 마이클 그리고 나는 22살이야.
   다음엔 뭘 만들지? 아, 이메일 클라이언트! 이걸 만들어야겠다.

 

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

코드 한눈에 보기

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def say_hello(self, to_name):
    print("안녕! " + to_name + " 나는 "+self.name)
  
  def introduce(self):
    print("내 이름은 " + self.name + " 그리고 나는 " + str(self.age) + "살이야.")

class Police(Person):
  def arrest(self, to_arrest):
    print("넌 체포됐다. " + to_arrest)

class Programmer(Person):
  def program(self, to_program):
    print("다음엔 뭘 만들지? 아, " + to_program + "! 이걸 만들어야겠다.")

sungjoong = Person("성중", 21)
jenny = Police("제니", 23)
michael = Programmer("마이클", 22)

sungjoong.introduce()

jenny.introduce()
jenny.arrest("성중")

michael.introduce()
michael.program("이메일 클라이언트")