쿨가이두번째삶

파이썬공부 12 클래스, __init__, 멤버변수, 메소드, Self 본문

개발,coding/Python파이썬

파이썬공부 12 클래스, __init__, 멤버변수, 메소드, Self

쿨가이두번째삶 2022. 12. 5. 10:53
728x90
반응형

 

 

 

클래스는 여러 변수들을 묶어서 한 번에 관리할 수도 있고 클래스안에 어떤 기능을 하는 함수와 같은 걸 만들어서

동작 하도록 할 수도 있다. 클래스는 한가지로 여러가지 'object' 객체를 만들수 있다.

이 각 각의 object는 이 클래스의 '인스턴스(instance)'라고 표현한다

클래스 = 설계도 + 설명도 

 

클래스

>>

변수도 여러가지 가질 수 있고, 함수도 여러가지 가질 수 있다

특정 객체에 별도의 변수를 따로 추가하게 되면 해당 객체만 추가되고 다른 객체에는 영향이 없다

__init__함수 내에서 self.name = name과 같이 정의되는 변수를 멤버변수라고 한다

서로 다른 두 객체의 멤버 변수는 서로 다른 값을 가질 수 있다

멤버 변수는 없을 수도 있고 여러 개가 있을 수도 있다

 

class 클래스명:
    정의

ex)

class BlackBox: #클래스명은 대문자로 시작
    pass
b1 = BlackBox()
b1.name = '파이썬'
print(b1.name)

>>파이썬

class BlackBox: #클래스명은 대문자로 시작
    pass

b1=BlackBox()
b1.name = '파이썬'
print(b1.name)
print(isinstance(b1.BlackBox))

 

 

 

init

>> def__init__(self, name, price) 

 

ex)

class BlackBox: #클래스명은 대문자로 시작

    def __init__(self, name, price):
        self.name = name
        self.price = price

b1=BlackBox('파이썬',str('100,000원'))
print(b1.name, b1.price)

>>파이썬 100,000원

 

ex2) b2를 추가 했을때

class BlackBox: #클래스명은 대문자로 시작

    def __init__(self, name, price):
        self.name = name
        self.price = price

b1=BlackBox('파이썬',str('100,000원'))
print(b1.name, b1.price)
b2=BlackBox('자바',str('100,000원'))
print(b2.name, b2.price)

>>

파이썬 100,000원
자바 100,000원

BlackBox클래스 =

변수1 : name  변수2 : price  

 b1객체 

name:'파이썬' 100,000원

 b2객체

name:'자바' 100,000원

 

 

멤버변수

 

위 예제중 self.name 과 self.price 를 '멤버 변수'(클래스 객체마다 서로 다른값을 가질 수 있다)라 한다

만약, 위 예제중 b1객체에만 추가로 정보를 주고 싶다면 

name : '파이썬'
price : 100000
nickname : 'no1'

이렇게 추가로 옵션을 넣으면되고,  이 값은 b2와는 관계없다

 

 

메소드(Method)

클래스내에 선언되는 함수

추가적으로 '기능'을 추가하고 싶을때 이를 응용할 수 있다

ex)

class BlackBox:
    def __init__(self,name,price):
        self.name=name
        self.price=price
   
   
    def set_travel_mode(self):
        print('여행모드ON')

b1=BlackBox('파이썬', 100000)
b1.set_travel_mode()

>>여행모드ON

 

ex1) 지정한 시간동안만 추가 추가 기능이 실행하도록 설정하고 싶으면

class BlackBox:
    def __init__(self,name,price):
        self.name=name
        self.price=price
   
   
    def set_travel_mode(self,min):
        print(str(min)+'분 동안 여행모드ON')

b1=BlackBox('파이썬', 100000)
b1.set_travel_mode(30)

>>30분 동안 여행모드ON

 

ex)

class Student:
    def introduce(self, name, age):
        print(f'my name is {name} and {age} years old')
student = Student()
student.introduce('Python',10)
print(Student)

>>my name is Python and 10 years old

 

ex)


class BlackBox:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def set_travel_mode(self, min):
        print(f'{self.name} {min}분 동안 여행모드ON')

b1=BlackBox('Python', 100000)
b2=BlackBox('Java', 100000)

b1.set_travel_mode(10)
b2.set_travel_mode(10)

>> # 'self'는 객체 자기 자신이다, BlackBox클래스의 메소드를 호출하면서 '전달값', '객체'를 다 지정 해줘도 되지만, 

b1객체를 통해 메소드를 호출하면서 나머지 전달값들만 지정해주면 된다 

Python 10분 동안 여행모드ON
Java 10분 동안 여행모드ON

 

>> 클래스 메소드를 정의할 때

SElF 

*self는 객체 자기 자신을 의미

* 메소드를 정의할 때 처음 전달값은 반드시 self

* 메소드 내에서는 self.name과 같은 형태로 멤버변수를 사용

* 객체를 통해 메소드를 호출할 때 self부분에 전달값은 따로 명시하지 않는다

728x90
반응형