python 클래스

yo·2020년 5월 13일
0

-객체지향(object oriented)프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해 문제를 해결.
-복잡한 문제를 처리하는데 유용하며, 기능 개선, 발전할 때도 해당 클래스만 수정하면 되므로 유지 보수에 효과적
문법*

class 클래스이름:
    def 메서드(self):
        코드

-메서드의 첫 매개변수는 반드시 self 지정해야 함.
예시

class Person:
	def greeting(self):
		print("Hello")

-클래스에 괄호 붙인 뒤 변수에 할당해야 한다.
인스턴스 = 클래스()
>>> james = Person()
-Person으로 변수 james를 만들었는데, 이 james가 Person의 인스턴스(instance)임
-클래스는 특정 개념을 표현만 할 뿐 사용하려면 인스턴스를 생성 해야함.

메서드 호출하기

-메서드는 클래스가 아니라 인스턴스를 통해 호출
문법: 인스턴스.메서드 ()
james.greeting() Hello
-인스턴스를 통해 호출하는 메서드를 인스턴스 메서드라고 부름

파이썬에서 흔히 볼 수 있는 클래스

-int, list, dict, 자료형등도 클래스다.
-이 클래스들 역시 인스턴스를 만들고 메서드를 사용함.

a = int(10)
print(a)
10

클래스 속성 사용

-속성(attribute)를 만들 때는 init 메서드 안에서 self.속성에 값을 할당
-앞 뒤로 밑 줄 두개가 붙은 메서드는 파이썬이 자동으로 호출해주는 메서드인데, special method, magic method라고 부름.

문법

class 클래스이름():
    def __init__(self):
    self.속성 = 값

예제

class Person():
    def __init__(self):
        self.hello = "안녕하세요"

    def greeting(self):
        print(self.hello)

james = Person()
james.greeting

실행결과: 안녕하세요

-self는 인스턴스 자기 자신을 의미

인스턴스 만들 때 값 받기

-init메서드에서 self 다음에 값을 받을 매개변수 지정.
-매개변수를 self.속성에 넣어준다.
문법

class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

예시

class Person:
    def __init__(self, name, age, address):
        self.hello = '안녕하세요.'
        self.name = name
        self.age = age
        self.address = address

    def greeting(self):
        print('{0} 저는 {1}입니다.'.format(self.hello, self.name))

maria = Person('마리아', 20, '서울시')
maria.greeting()

print('이름:', maria.name)
print('나이:', maria.age)
print('주소:', maria.address)


결과
안녕하세요. 저는 마리아입니다.
이름: 마리아
나이: 20
주소: 서울시

-클래스 바깥에서 속성에 접근할 떄는 인스턴스.속성 형식으로 한다.
-인스턴스를 통해 접근하는 속성을 인스턴스 속성이라 부름.

클래스 비공개 속성

-비공개 속성은 속성 앞에 __를 쓴다. 단, 앞뒤로 사용하면 무효.
-비공개 속성은 클래스 안에 메서드에서만 접근 가능.
-클래스 밖에서 비공개 속성에 접근하면 에러 발생.
-중요한 값을 바깥에서 바꾸지 못하게 할 대 비공개 속성 사용.
비공개 속성 문법

class 클래스이름:
    def __init__(self, 매개변수)
        self.__속성 = 값

예시

class Person:
    def __init__(self, name, age, address, wallet):
        self.hello = '안녕하세요.'
        self.name = name
        self.age = age
        self.address = address
        self.__wallet = wallet

    def pay(self, amount):
        self.__wallet -= amount
        print('이제 {0}원 남았네요.' .format(self.__wallet))
    def greeting(self):
        print('{0} 저는 {1}입니다.'.format(self.hello, self.name))

maria = Person('마리아', 30, '서울', 10000)
maria.pay(3000)

결과: 이제 7000원 남았네요.
profile
Never stop asking why

0개의 댓글