정리노트

[파이썬/python] [클래스] 객체 생성, 기본정의 본문

프로그래밍/Python

[파이썬/python] [클래스] 객체 생성, 기본정의

Rolen 2022. 9. 20. 23:40

절차 지향 프로그래밍 (프로시저 지향 프로그래밍)은 서로 관련된 데이터와 함수를 묶을 수가 없다.

(함수는 active 한다. 이 함수를 이용하여 데이터에 변화를 줄 수는 있지만 일정 데이터를 가지는 하나의 객체가 될 수(생성 할 수) 없음.)

 

자동차를 만들 때마다 설계를 하는 것보다는

설계도 및 시스템을 하나 만들고

여러 대의 자동차를 만들 때 이름만 다르게 하여 찍어낼 수 있다.

 

클래스(Class) = 객체를 만들기 위한 설계도

# 자동차 설계도

인스턴스(instance) = 클래스로 만들어진 객체

# 자동차

 

class Counter():        # class의 네이밍 = 첫 글자는 대문자
						# class "생성자" 이름은 꼭 __init__ (객체 초기화 함수)
    def __init__(self): # 클래스로 객체를 생성할 때 디폴트로 호출됨, 매개변수(self) 항상 포함.
        self.count = 0  # 인스턴스 변수 생성(self.변수명) / 항상 생성자 안에서 초기화 해야한다.

    def increment(self):	# 메소드 생성
        self.count += 1		# 메소드 호출시의 동작

def sel():
    global ask
    ask = input("Y or N ? ")
    ask = ask.upper()

a = Counter()	# a 라는 이름의 Counter 클래스 객체생성 / 생성과 동시에 '생성자' 호출
				# b 데이터를 가지는 객체 생성시, 다른 정의 없이 b = Counter() 호출
sel()

while ask == 'Y':
    a.increment()	# Y가 입력될 때 마다 a객체의 메소드 호출로 a객체의 인스턴스 변수 값 증가
    sel()

print(f"Y가 입력된 횟수 : {a.count}")

class의 생성자 __init__ 내부에서 선언된 인스턴스 변수는

함수 내에서만 동작하는 지역변수와는 범위가 다르다.

class 내부 전체에서 사용가능

 

예시풀이) PYTHON EXPRESS

P376

class Television:
    def __init__(self, channel, volume, on):
        self.channel = channel
        self.volume = volume
        self.on = on
    
    def show(self):
        print(self.channel, self.volume, self.on)
    
    def setChannel(self, channel):
        self.channel = channel

    def getChannel(self):
        return self.channel

a = Television(10, 15, True) # 생성시 channel, volume, on 초기화
a.show()		# 메소드 실행 // 출력 : 10 15 True
a.setChannel(7) # 메소드 실행 -> channel 값 7로 변경
a.show()		# 출력 : 7 15 True
728x90