Python
Python 문법 기초 24 - class 포함관계(1)
코딩탕탕
2022. 10. 22. 17:00
# 클래스의 이해
kor = 100 # 전역 변수(소속이 모듈)
def abc(): # 함수(소속이 모듈)
a = 10 # 지역변수(소속이 abc 함수)
print('함수')
class MyClass: # 클래스(소속이 모듈)
kor = 90 # 멤버변수(소속이 MyClass 클래스 소속)
"""
def __init__(self):
pass
"""
def abc(self):
print('메소드')
def show(self):
# kor = 80 # 지역변수(소속은 show 메소드)
print(self.kor)
print(kor)
self.abc() # 메소드를 콜
abc() # 함수를 콜
my = MyClass()
my.show()
<console>
90
100
메소드
함수
self 는 주소를 의미하며 self.abc() 를 입력하면 my의 주소를 가져오며 my의 abc 메소드를 호출한다.
self를 입력하지 않고 abc()만 입력하면 전역함수인 abc()가 호출된다. kor도 마찮가지이다.
class : 새로운 타입을 생성
# class : 새로운 타입을 생성
print('가수 관련 클래스')
class singerType:
title_song = '화이팅 코리아'
def sing(self):
msg = '노래는 '
print(msg, self.title_song + ' 랄랄라 ~~~')
# 가수 한 명을 탄생
# import pack2.class4
from pack2.class4 import singerType
def process():
# youngwoung = pack2.class4.singerType()
youngwoung = singerType()
print('영웅의 타이틀 송 : ', youngwoung.title_song)
youngwoung.sing()
def process2():
bts = singerType() # 생성자 호출(실행해라)
# bts = singerType # 주소를 호출
bts.sing()
bts.title_song = '최고의 순간은 아직'
bts.sing()
bts.co = 'HIVE'
print('소속사 : ', bts.co)
print()
blackpink = singerType()
blackpink.sing()
blackpink.title_song = '셧다운'
blackpink.sing()
if __name__ == '__main__':
process()
print('--------')
process2()
<console>
가수 관련 클래스
영웅의 타이틀 송 : 화이팅 코리아
노래는 화이팅 코리아 랄랄라 ~~~
--------
노래는 화이팅 코리아 랄랄라 ~~~
노래는 최고의 순간은 아직 랄랄라 ~~~
소속사 : HIVE
노래는 화이팅 코리아 랄랄라 ~~~
노래는 셧다운 랄랄라 ~~~
class를 생성한다. 다른 모듈 파일에서 import 해서 사용 가능하다.
생성자를 호출할때마다 각기 다른 고유의 주소를 가진 객체들이 생성되고, class 의 값들은 생성된 객체의 값마다 다를 수 있다. 또한 원본 class에 없는 변수도 추가 가능하다. 다만 메소드는 추가 불가능하다.
예제 1)
# 클래스는 다른 클래스를 불러다 사용 가능
# 클래스의 포함관계(has a)
class Pohamhandle: # 핸들이 필요한 어떤 클래스에서든 호출 가능
quantity = 0 # 회전량
def LeftTurn(self, quantity):
self.quantity = quantity
return '좌회전'
def RightTurn(self, quantity):
self.quantity = quantity
return '우회전'
# ...
# 자동차를 위한 여러 부품을 별도의 클래스로 제작 : 생략
# 핸들이 필요할 때마다 만들어 둔 클래스를 가져다 사용
# 완성제품 클래스
class PohamCar:
turnShowMessage = '정지'
def __init__(self, ownerName):
self.ownerName = ownerName
self.handle = Pohamhandle() # 클래스의 포함
def TurnHandle(self, q):
if q > 0:
self.turnShowMessage = self.handle.RightTurn(q)
elif q < 0:
self.turnShowMessage = self.handle.LeftTurn(q)
elif q == 0:
self.turnShowMessage = '직진'
self.handle.quantity = 0
if __name__ == '__main__':
tom = PohamCar('톰')
tom.TurnHandle(10)
print(tom.ownerName + '의 회전량은 ' + tom.turnShowMessage + str(tom.handle.quantity))
tom.TurnHandle(0)
print(tom.ownerName + '의 회전량은 ' + tom.turnShowMessage + str(tom.handle.quantity))
tom.TurnHandle(-1)
print(tom.ownerName + '의 회전량은 ' + tom.turnShowMessage + str(tom.handle.quantity))