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) 의 주소를 참조
'''
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()