TIL - 29 python class -2

이동근·2021년 1월 17일
0

python

목록 보기
15/18

class - 2

method(메소드)?

-> 클래스 내에서 정의 되어진 함수를 메소드 라고 한다.

종류

1. 인스턴스 메소드
2. 클래스 메소드
3. 정적 메소드

인스턴스 메소드

인스턴스 변수의 값을 읽거나 설정하는 메소드

클래스 메소드

클래스 변수의 값을 읽서 구현하는 메소드

사용하는 방법

1. class User:

  • 클래스 선언

2. count = 0

  • 클래스 변수로 생성되는 인스턴스의 갯수 초깃값

3. def init(self, name, email,password):

인스턴스 객체인 self가 사용된 init 함수 인스턴스 객체로 부터 파라미터 대로 각 값을 받아서 저장 그리고 한 개의 인스턴스 객체가 생성 될때 마다 count를 올려주기 위해 'User.count += 1' 로 1씩 더해주기

4. def say_hello(self, name):

name을 파라미터로 가지는 인스턴스 메소드

5. def str(self):

str 을 가지는 인스턴스 메소드로서, 기능은 인스턴스 메소드를 print 함수로 출력할때 출력하고 싶은 구성을 만들어 준다.

6. def number_of_users(cls):

이 함수는 클래스 메소드 이다. 위에 User.count += 1 로 클래스 변수인 count에 1씩 더해준 값을 출력해 주는 클래스 메소드 이다. 이 메소드 위에 보면 @classmethod 라고 데코레이터가 되어있다. 반드시 데코레이터 해줘야 한다. 인스턴스 메소드의 인스턴스 변수를 받는 파라미터로 'self'로 약속 했듯이, 클래스 메소드는 'cls'로 약속했다.
즉 위에 메소드를 보게 되면 cls = User 이고, cls.count = User.count 이 되면서 User.count의 갯수를 출력 할 수있다.

인스턴스 메소드 vs 클래스 메소드

1. 인스턴스 메소드

  1. User.say_hello(user1)
  2. user1.say_hello()

2. 클래스 메소드

  1. User.number_of_users()
  2. user1.number_of_users()

인스턴스 메소드를 클래스로 호출하게 되면 인스턴스 변수를 넣어 줘야 하지만 왜 클래스 메소드는 하지 않아도 되는가?

-> 클래스 메소드는 자동으로 첫번째 파라미터로 자기자신을 전달하기 때문에 넣어줄 필요가 없다.

인스턴스 변수 -> 인스턴스 메소드, 클래스 변수 -> 클래스 메소드 그럼 두 개 다 사용할때는 어떻게 해야 하는가?

-> 클래스 메소드는 클래스 변수만 사용가능하기때문에 불가능 하지만, 인스턴스 메소드는 클래스변수, 인스턴스 변수 모두 사용이 가능하다.

-> 인스턴스 변수는 없지만 필요한 정보가 있다거나, 인스턴스 변수가 업슬때에는 클래스 메소드를 사용해 주면 된다.

3. 정적 메소드(staticsmethod)

세 번째 메소드로서, 이 메소드는 인스턴스 변수, 클래스 변수를 다루지 않는 메소드 입니다. 즉 어떤 속성을 다루지 않고, 단지 기능적인 역할만 하는 메소드를 정의할때 사용한다.

email_address 에 @가 있는지 없는지만 확인 하는 메소드로서 @staticmathod 라는 데코레이터를 가지고 있다.

출처 - codeit(객체지향 프로그래밍)

profile
하루하루 1cm 자라는 개발자

0개의 댓글