본문 바로가기

OOP

파이썬 객체생성 초기화__init__ , SELF 매개변수

1. 클래스 객체를 만들때 __init__ 인스턴스를 초기화해야한다.

def __init__(self):
      self.switchIsOn = False

 
 
1-1. 매개변수 self는 클래스 객체 스코프에 속한 모든 메서드에 접근이 가능하다 그리고 모든 객체 메서는 반드시 매개변수 self가 있어야한다.

class LightSwitch():
  # 클래스 객체를 만들때 인스턴스를 초기화해야한다.
  # 매개변수 self는 클래스 객체 스코프에 속한 모든 메서드에 접근이 가능
  def __init__(self):
    self.switchIsOn = False

  def turnOn(self):
    self.switchIsOn = True

  def turnOff(self):
    self.switchIsOn = False

  # turn on,off에 따라 True가 나올수 있고 False가 나올 수 있다.
  # 결과값을 출력해준다.
  def show(self):
    print(self.switchIsOn)

oLightSwitch = LightSwitch()

oLightSwitch.show() #false

oLightSwitch.turnOn()
oLightSwitch.show() #true
oLightSwitch.turnOff()
oLightSwitch.show() #false
oLightSwitch.turnOn()
oLightSwitch.show() #true

 
 
2. 응용예제 
토글기능을 이용하여 일일이 self.isOn 값을 True ,False로 설정하지 않아도 된다. 토글 함수가 호출할때마다 상태가 변화한다.
 
2-1. 텔레비전 기능들 명세화
2-1-1. 전원을 켜고 끄는 기능(토글기능)
2-1-2. 볼륨을 높이거나 낮추는 기능
2-1-3. 채널번호를 변경하는 기능
2-1-4. 음소거를 활성화하거나 비활성화하는 기능
2-1-5. 현재 설정의 정보를 조회하는 기능
2-1-6. 특정채널로 이동하는 기능 

class TV():

  def __init__(self):
    self.isOn = False
    self.isMuted = False
    self.isMuted = False
    self.channelList = [2, 4, 5, 7, 9, 11, 20, 36, 44, 54, 65]
    self.nChannels = len(self.channelList)  #리스트 크기
    self.channelIndex = 0
    self.VOLUME_MINIMUM = 0
    self.VOLUME_MAXIMUM = 10
    self.volume = self.VOLUME_MAXIMUM // 2  # 나누기한 몫을 볼룸값으로 지정

  def power(self):
    self.isOn = not self.isOn  # 값을 뒤집는 토글 기능(키고켜는)

  def volumeUp(self):
    if not self.isOn:
      return  # 소리 On

    # 음소거가 활성화되어있을때 볼륨을 조절하면 음소거 비활성화
    if self.isMuted:
      self.isMuted = False

    if self.volume < self.VOLUME_MAXIMUM:
      self.volume = self.volume + 1

  def volumeDown(self):
    if not self.isOn:
      return  # 소리 On

    # 음소거 비활성화
    if self.isMuted:
      self.isMuted = False

    if self.volume > self.VOLUME_MINIMUM:
      self.volume = self.volume - 1

  def channelUp(self):
    if not self.isOn:
      return  # 채널On

    self.channelIndex = self.channelIndex + 1
    if self.channelIndex > self.nChannels:
      #마지막 채널에서 채널을 증가하면 인덱스값이 0이되어서 다시 처음으로 채널로돌아온다
      self.channelIndex = 0

  def channelDown(self):
    if not self.isOn:
      return  # 채널On
    self.channelIndex = self.channelIndex - 1
    #첫번째 채널에서 채널을 감소하면 다시마지막 채널로 돌아온다.
    if self.channelIndex < 0:
      self.channelIndex = self.nChannels - 1

  def mute(self):
    if not self.isOn:
      return  #음소거 On
    self.isMuted = not self.isMuted

  def setChannel(self, newChannel):
    #만약에 채널리스트 해당하는 채널번호가 존재하지 않으면
    #새로운 채널번호를 새로운 인데스 번호로 생성해준다
    if newChannel in self.channelList:
      self.channelIndex = self.channelList.index(newChannel)

  def showInfo(self):
    print()
    print("TV 상태:")
    if self.isOn:
      print("tv전원상태: 켜짐")
      print("선택된 채널번호:", self.channelList[self.channelIndex])
      if self.isMuted:
        print("볼륨 크기:", self.volume, "(음소거 활성화)")
      else:
        print("볼륨 크기:", self.volume)

    else:
      print("tv전원상태: 꺼짐")


oTV = TV()

#Tv 토클 스위치를 켜고 상태 출력 
oTV.power()
oTV.showInfo()

oTV.channelUp()
oTV.channelUp()
oTV.channelUp()
oTV.volumeUp()
oTV.volumeUp()
oTV.showInfo()

oTV.volumeDown()
oTV.mute()  #음소거 활성화 
oTV.showInfo()

#메소드를 호출하여 11의 인자값을 전달한다 
#채널11번로 변경 
oTV.setChannel(11) 
#음소거활성화 상태에서 볼륨을 조절하면 음소거가 비활성화된다.
oTV.mute()
oTV.showInfo()

 

결과화면 출력

 
 
 
 
https://www.yes24.com/Product/Goods/122575344

객체지향 파이썬 - 예스24

강력하고 효율적이며 재사용 가능한 파이썬 코드 객체지향 패러다임은 코드와 데이터를 효과적으로 결합해 재사용성이 높은 코드를 만든다. 이 책은 객체지향 프로그래밍을 마스터할 수 있는

www.yes24.com

 

'OOP' 카테고리의 다른 글

헤드퍼스트 디자인패턴 - Facade 패턴  (0) 2024.05.05
헤드퍼스트 디자인패턴 - 커맨드패턴  (0) 2024.05.04
인터페이스 설계도  (0) 2024.02.01
다형성  (0) 2024.02.01
PHP 객체의 속성에 객체 저장  (0) 2024.01.30