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))