일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Convolution Neural Network
- #opencv
- 완전탐색
- 딥러닝
- opencv SURF
- python 알고리즘
- #1일1영어
- TensorFlow
- word embedding
- #Android
- python list
- #프로젝트
- #일상영어
- #실생활영어
- c언어
- text2img
- object detection
- 영어
- #영어
- #실생활 영어
- findContours
- #영어 명언
- 이미지 생성
- convexhull
- 영어명언
- python __init__
- #English
- keras
- tokenizing
- tensorflow update
Archives
- Today
- Total
When will you grow up?
(class, instance, static) method_03 본문
이번시간에는 class, instance, static 메소드에 대해 알아보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
class Car(object): # 모든 클래스는 object를 상속받는다.
""" # 파이써닉 규칙 (description)
Car class
Author: Mekai
Data: 2021.03.21
Description : Class, Static, Instance Method
"""
# 클래스 변수(모든 인스턴스가 공유)
price_per_raise = 1.0
def __init__(self, company, details):
self._company = company
self._details = details
def __str__(self):
return 'str : {} - {}'.format(self._company, self._details)
def __repr__(self):
return 'repr: {} - {}'.format(self._company, self._details)
# Instance Method
# self : 객체의 고유한 속성 값을 사용
def detail_info(self): # self 매개변수로 받는것을 인스턴스 메소드(instance method)라고 한다
print('Current ID : {}'.format(id(self)))
print('Car Detail Info : {} {}'.format(self._company, self._details.get('price')))
# Instance Method
def get_price(self):
return 'Before Car Price -> company : {}, price : {}'.format(self._company, self._details.get('price'))
# Instance Method
def get_price_culc(self):
return 'After Car Price -> company : {}, price : {}'.format(self._company, self._details.get('price')* Car.price_per_raise)
# class Method
# instance method는 self를 인자값으로 받고, classmethod 는 cls는 인자로 받는다
@classmethod # 명시적으로 쓰기 위해 데코레이터가 달려있다!
def raise_price(cls, per): # cls는 객체 Car다.. 명시적으로 쓰는것!
if per <= 1:
print('Plaease Enter 1 or More')
return
else:
cls.price_per_raise = per
print('Succeed!')
# static method는 아무것도 전달받지 않는다/ instance method는 self / classmethod는 cls 객체를
# static method 없어도 cls로 다 할 수 있다는 의견들이 많다.. 인터넷 찾아보면 ~_~
# 아무것도 받지 않기 때문에 유연하긴하다.. 공통적으로 만들때 쓰는것
@staticmethod
def is_bmw(inst): # bmw 차가 맞는지 판단하는..
if inst._company =='Bmw':
return 'OK! This car is {}'.format(inst._company)
else:
return 'Sorry. This car is not Bmw.'
car1 = Car('Ferrari', {'color': 'White', 'horsepower': 400, 'price': 8000})
car2 = Car('Bmw', {'color': 'Black', 'horsepower': 270, 'price': 5000})
|
cs |
자동차 2개 객체를 추가하여 위 클래스 기반으로 알아보도록 하자.
@classmethod
클래스 메소드는 cls를 인자값 받으며 명시적으로 쓰기 위해 @ (데코레이터)가 달려있다.
자기 자신을 의미하기 때문에 일반적으로 클래스 변수에 접근하기 위해 사용된다.
def detail_info(self):
인스턴스 메소드는 객체의 고유한 값을 가지고 self로 메소드를 만들고,
객체의 인스턴스 필드를 self를 통해 접근가능하다.
@staticmethod
스태틱 메소드는 아무것도 전달 받지 않기 때문에 유연하게 메소드를 만들 수 있고 공통적으로 무언가 만들때 자주 사용된다.
하지만 cls로 다 할 수 있다는 의견들이 많은데 인터넷 검색해보면 나온다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# 전체정보 출력
car1.detail_info()
car2.detail_info()
# 가격정보 (직접 접근)
print(car1._details.get('price')) # 이렇게 접근할 수 있지만, 자기 인스턴스 변수에 직접 접근하는 방법은 좋지 않다. 막아놓는다.
print(car2._details['price']) # 이렇게 접근할 수 있지만, 자기 인스턴스 변수에 직접 접근하는 방법은 좋지 않다. 막아놓는다.
# 가격정보(인상 전->인스턴스 메소드 접근)
print(car1.get_price())
print(car2.get_price())
# 가격 인상
Car.price_per_raise = 1.4 # 사실 이렇게 직접 접근하는 방식은 좋지 않다.
# 가격정보(인상 후->인스턴스 메소드 접근)
print(car1.get_price_culc())
print(car2.get_price_culc())
# 가격 인상(클래스 메소드 사용)
Car.raise_price(1.6)
print(car1.get_price_culc())
print(car2.get_price_culc())
# Staticmethod
# 아래처럼 호출할 수 있지만 엄청나게 유연하다!
print(car1.is_bmw(car1))# 인스턴스로 호출
print(car2.is_bmw(car2))
# 이렇게 유연하게 호출도 가능.
print(Car.is_bmw(car1)) # 클래스로 호출
print(Car.is_bmw(car2))
|
cs |
간단정리하면 static method는 아무것도 전달받지 않고, instance method는 self, classmethod는 cls 객체를 전달 받는다.
우리를 위한 프로그래밍 : 파이썬 중급 를 기반으로 정리하였으며,
기본적인 내용보다는 실질적으로 Why? 라는 의문이 가질 법한 내용 위주로 정리하였습니다.
'02. Study > Python' 카테고리의 다른 글
파이썬 시퀀스(python sequence)_05 (0) | 2022.03.22 |
---|---|
Magic method(special method)_04 (0) | 2022.03.22 |
클래스 변수 & 인스턴스 변수([Class,Instance] variable)_02 (0) | 2022.03.21 |
클래스&메소드(class&method)_01 (0) | 2022.03.21 |
python break, pass, continue 차이점 (0) | 2019.10.15 |
Comments