클래스란?
- 객체를 표현하기 위한 문법
객체란?
- 객체는 어떠한 속성값과 행동을 가지고 있는 데이터입니다.
메서드란?
- 클래스 안에서 사용하는 함수
클래스 구조
class 이름: def 메서드(self): 코드
ex)
class Person: def hi(self): print("Hello") sunrin = Person() sunrin.hi()
Person이라는 클래스 안에 hi라는 메서드를 만들었다.
그리고 "인스턴스 = 클래스()"의 구조로 Person의 인스턴스를 만들어 주고 "인스턴스.메서드"의 구조로 hi라는 메서드를 호출해준다.
=>인스턴스를 통해 호출하는 메서드를 인스턴스 메서드라고 한다.
##인스턴스란 객체 지향 프로그래밍에서 인스턴스는 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미한다.
type을 이용하여 객체의 클래스를 확인 할 수 있다.
class Person: def hi(self): print("Hello") sunrin = Person() print(type(sunrin)) --출력-- <class '__main__.Person'>
속성 사용하기
구조
class 이름: def __init__(self): self.속성 = 값
ex)
class Person: def __init__(self): self.hello = '안녕하세요' def hi(self): print(self.hello) sunrin = Person() sunrin.hi() --출력-- 안녕하세요
hi메서드에서 print로 self.hello를 출력 -> Person클래스로 인스턴스 만듦 -> hi메서드 호출 -> self.hello에 저장된 값 출력
self는 인스턴스 자기자신을 의미한다.
인스턴스 만들때 값 받기
구조
class 이름: def __init__(self, 매개변수1, 매개변수2, ...): self.속성1 = 매개변수1 self.속성2 = 매개변수2 인스턴스 = 클래스(매개변수1, 매개변수2...)
ex)
class Person: def __init__(self, name, age, add): self.hello = 'Hello' self.name = name self.age = age self.add = add def hi(self): print("{0} 저는 {1}입니다".format(self.hello, self.name)) sunrin = Person('sunrin', 20, '서울시') sunrin.hi() print("이름 :",sunrin.name) print("나이 :",sunrin.age) print("주소 :",sunrin.add) --출력-- Hello 저는 sunrin입니다 이름 : sunrin 나이 : 20 주소 : 서울시
__init__메서드에 self다음에 매개 변수를 저장한다.
메서드 안에서는 self.name = name처럼 매개변수를 그대로 self에 넣어서 속성으로 만든다.
비공개 속성
- 클래스 바깥에서는 접근할 수 없고 클래스 안에서만 접근할 수 있다.
구조
class 이름: def __init__(self): self.__속성 = 값
ex)
class Person: def __init__(self, name, age, add, wallet): self.name = name self.age = age self.add = add self.__wallet = wallet #비공개 속성 def pay(self, amount): self.__wallet -= amount print("이제 {}원 남았네요".format(self.__wallet)) sunrin = Person('sunrin', 20, '서울시', 10000) sunrin.pay(3000) --출력-- 이제 7000원 남았네요
메서드도 이름이 __로 시작하면 클래스 안에서만 호출할수 있는 비공개 메서드가 된다.
클래스 속성
class 이름: 속성 = 값
ex)
class Item: bag = [] def put_bag(self, stuff): self.bag.append(stuff) sunrin = Item() sunrin.put_bag('책') james = Item() james.put_bag('열쇠') print(sunrin.bag) print(james.bag) --출력-- ['책', '열쇠'] ['책', '열쇠']
클래스 속성은 모든 인스턴스와 공유한다는 것을 알 수 있다.
위의 클래스를 인스턴스 속성을 이용하여 분리해 줄 수 있다,
인스턴스 속성
class Item: def __init__(self): self.bag = [] def put_bag(self, stuff): self.bag.append(stuff) sunrin = Item() sunrin.put_bag('책') james = Item() james.put_bag('열쇠') print(sunrin.bag) print(james.bag) --출력-- ['책'] ['열쇠']
인스턴스 속성은 인스턴스별로 독립되어 잇어서 서로에게 영향을 주지 않는다.
정적 메서드
구조
class 이름: @staticmethod def 메서드(매개변수1, 매개변수2): 코드 클래스.메서드()
메서드 위에 @staticmeth를 쓴다.
ex)
class Calc: @staticmethod def add(a,b): print(a+b) @staticmethod def mul(a,b): print(a*b) Calc.add(10,20) Calc.mul(10,20) --출력-- 30 200
정적 메서드는 self를 받지 않음으로 인스턴스 속성에 접근할 수 없다
보통 인스턴스 속성, 인스턴스 메서스가 필요하지 않을때 사용한다.
클래스 메서드
구조
class 이름: @classmethod def 메서드(cls, 매개변수1, 매개변수2): 코드
메서드 위에 @classmethod를 쓴다.
ex)
class Person: cnt = 0 #클래스 속성 def __init__(self): Person.cnt += 1 #인스턴스가 만들어질때마다 클래스속성 cnt에 1을 더함 @classmethod def print_cnt(cls): print("{}명 생성되었습니다".format(cls.cnt)) #cls로 클래스 속성에 접근한다 sunrin = Person() maria = Person() james = Person() Person.print_cnt() --출력-- 3명 생성되었습니다
'Emotion > 파이썬' 카테고리의 다른 글
예외처리 (0) | 2020.09.04 |
---|---|
클래스_2 (0) | 2020.09.02 |
함수_2 (0) | 2020.08.26 |
파이썬 함수_1 (0) | 2020.07.08 |
파이썬 반복문 (0) | 2020.07.07 |