본문 바로가기
SK 행복성장캠퍼스/Python 기초

0907_6일차_클래스_클래스메서드

by NickNuma 2020. 9. 7.

클래스 메서드에 대한 설명입니다.

일단, 클래스에 대해서 지금까지 내용을 기억한다면,
'아니? 클래스의 메서드랑 클래스 메서드랑 뭔 차이임?' 하실 겁니다. (제가 그랬습니다. 하하;)

 


클래스의 메서드는 일반 메서드라고도 불리고 인스턴스 메서드라고도 불립니다. 파라미터로 self값을 갖지요.
반면에, 클래스 메서드는 객체 생성 없이 기능을 구현할 목적으로 만들어졌습니다. 그리고 변수를 모든 인스턴스(객체)들과 공유합니다.

클래스의 일반 메서드는 클래스 메서드를 참조할 수 있지만 클래스 메서드는 일반 메서드의 값(self)를 참조할 수 없습니다. 

"""
   클래스 메서드 (class method)

   1. 목적 : 기능적 처리, 객체생성없이 기능 구현할 목적,   클래스명.메서드 <- 객체(인스턴스)들과 공유
   2. 문법 :
         def 메서드(self):       <<- 일반 메서드 (인스턴스 메서드, regular method)
            pass

         @classmethod            # 데코레이터 ( decorator )
         def 메서드(cls):
            pass
   3. 특징 : self 사용 불가 ==> 인스턴스 변수 또는 인스턴스 메서드 사용 불가, 생성시점이 다름 (class mathod 1 -> 인스턴스 변수 2 -> 로컬 변수 3)

"""

 


class Person을 만들고 클래스 변수와, 생성자, 일반 메서드와 클래스 매서드를 생성하는 예제입니다.

class Person:
   gender = "남"               # gender = 클래스 변수

   def __init__(self, name):   # name = 로컬변수    <<-- cls 클래스 변수 사용 가능 (모든 객체(인스턴스)와 공유)
      print("self", id(self))  # self = class 주소값
      self.name = name         # self.name = 인스턴스 변수

   def get_name(self):         # 인스턴스 메서드 (일반 메서드, regualr method ), self => 인스턴스
      print(Person.gender, Person.get_gender())    # 인스턴스 함수에서 클래스 변수 이용 가능
      return self.name

   @classmethod
   def get_gender(cls):        # cls => 클래스     <<- self (인스턴스 변수) 사용 불가 <- 이건 객체꺼.
      print("cls =", id(cls))    # cls = 클래스 자체의 값
      return Person.gender

print(Person.gender, Person.get_gender())    # cls = 1330676933712   # 남 남
print("="*50)

print("Person =", id(Person))    # Person = 2465853847536
print("="*50)

p = Person("홍길동")              # self 2465885413088
print("p = ", id(p))             # p =  2465885413088

주중에는 간단하게 설명을 하고 주말에 복습겸 다듬도록 하겠습니다.

그럼 이만~

 

반응형

'SK 행복성장캠퍼스 > Python 기초' 카테고리의 다른 글

0907_6일차_예외 처리  (0) 2020.09.08
0907_6일차_상속  (0) 2020.09.07
0907_6일차_클래스변수  (0) 2020.09.07
0907_6일차_클래스_메서드  (0) 2020.09.07
0904_5일차_연습문제  (0) 2020.09.07

댓글