Python - 7

윤기나는코딩·2023년 3월 13일
0

Python

목록 보기
8/16

class : 새로운 타입을 생성. 객체 지향적(중심적)인 프로그래밍

  • 형식 class 클래스명(): 멤버(필드, 메소드) ~
  • 생성자, 소멸자가 있다, 접근지정자가 없다.
  • 다중상속 가능, interface가 없다.
print('뭔가를 하다가 모듈의 멤버인 클래스를 선언하기')
class TestClass:    # prototype , 원형클래스 객체 생성. 고유의 이름 공간을 확보
    aa =1 # 멤버변수(멤버필드), public
    
    def __init__(self): # 생성자
        print('생성자')
        
    def __del__(self):
        print('소멸자')
        
    def printMessage(self): # method
        name= '한국인'  # 지역변수
        print(name)
        print(self.aa)
        
print(TestClass, id(TestClass))
print(TestClass.aa)

test = TestClass()  # 생성자를 호출한 후 TestClass type의 객체 생성
print(test.aa)  # 멤버필드 호출
# 메소드 호출
# TestClass.printMessage() => 에러뜸
test.printMessage()
TestClass.printMessage(test) # UnBound method call
print()
test.printMessage()  # Bound method call
class Car: 
    handle = 0  # Car type의 객체에서 참조 가능 멤버 필드
    speed = 0
    
    def __init__(self, name, speed):
        self.name = name
        self.speed = speed

    def showData(self): # Car type의 객체에서 참조 가능 멤버 메소드
        km = '킬로미터'
        msg = '속도:' + str(self.speed) + km + ', 핸들은 ' + str(self.handle)
        return msg

print(id(Car))
print(Car.handle)
print(Car.speed)
print('-------')
car1 = Car('tom', 10)   # 생성자 호출 후 객체 생성-> __init__ 으로
print(car1.handle, car1.name, car1.speed)
car1.color = '보라해'
print('car1 color : %s'%car1.color)

print('-------')
car2=Car('james', 20)
print(car2.handle, car2.name, car2.speed)
# print('car2 color : %s'%car2.color) #  err ->'Car' object has no attribute 'color'
print('주소 : ', id(Car), id(car1), id(car2))

print(car1.showData())
print(car2.showData())  # 바운드 메소드 콜
print(Car.showData(car2))   # 언바운드 메소드 콜
print("------")
car2.speed = 100
Car.handle = 1
car1.handle = 2
print('car1 : ', car1.showData())  # 10
print('car2 : ', car2.showData())  # 100
'''
Car의 설계도가 static에 있고
car1=Car('tom',10) 하면
car1이라는 변수가 stack 영역에 있는데 
car1이 heap 영역에 있는 Car('tom',10) 의 주소를 참조
'''
  1. class의 이해
kor = 100   # 전역변수

def abc():  # 함수
    a = 10  # 지역 변수
    print('함수')
    
class MyClass:    # 클래스
    kor =90       # 멤버변수
    
    """
    def __init__(self): 되도록 안쓰는것이 좋음
        pass
    """
    def abc(self):
        print('메소드')
        
    def show(self):
        #kor = 80    # 지역변수
        print(self.kor)
        print(kor)  # 지역변수를 찾다가 없으면 전역변수 참조
        self.abc()  # 메소드 콜
        abc()       # 함수 콜
        
        
my = MyClass()
my.show()
profile
꾸준히 정리해서 공부한것을 올려보자!

0개의 댓글