python 기초 - class
2020. 4. 18. 03:23ㆍpython
선언
class 클래스명:
함수
함수
Class UserInfo:
pass
def__init__(self.name):#인스턴스 변수
self.name = name
def user_info_p(self):#인스턴스화
print("Name:", self.name)
#네임스페이스: 객체를 인스턴스화 할 때 저장된 공간
#클래스 변수: 직접 삳용 가능, 객체보다 먼저 생성
#인스턴스 변수: 객체마다 별도로 존재, 인스턴스 생성 후 사용
user1 = UserInfo("kim")#인스턴스 생성했으므로 사용 가능.
print(user1.name) #-> kim
user1.user_info_p() #-> Name: kim
print(user1.__dict__) #->{'name': 'kim'}
self의 이해
class SelfTest:
def function1(): #클래스 메소드
def function2(self): #인스턴스 매소드
#~~~~~~~~~~~~~ #인스턴스화 됨.
self_test = SelfTest()
self_test.function1() #-> ERROR!
selTest.fuction1() #-> OK
클래스변수(self x), 인스턴스 변수(self o)
class Warehouse:
#클래스 변수
stock_num =0
def__init__(self,name):
self.name = name
Warehouse.stock_num +=1
def _del_(self):
warehouse.stock_num -=1
user1 = Warehouse('kim')
user2 = Warehouse('Park')
user2 = Warehouse('Lee')
printf(user1.__dict__) #-> {name:kim}
#클래스 네임스페이스, 클래스 변수(공유)
printf(WareHouse.__dict__) #->클래스 네임스페이스, 클래스 변수(공유), stock_num:2 까지 출력
print(user1.name) #-> kim
printf(user1.stock_num) #->3, 자기 네임스페이스에 없으면 클래스의 네임스페이스에서 변수를 찾음
del user1
printf(user1.stock_num) #->2
#네임스페이스 : 객체를 인스턴스화 할 때 저장된 공간
#클래스 변수: 직접 사용 가능, 객체 보다 먼저 생성
#인스턴스 변수: 객체마다 별도로 존재, 인스턴스 생성 후 사용
상속, 다중상속
#슈퍼클래스(부모), 서브클래스(자식) -> 모든 속성, 메소드 사용 가능
class Car:
"""Parent Class"""
def __init__(self, tp, color):
self.type = tp
self.color = color
def show(self):
return 'car class "show method!"'
class BMW(car): #car의 모든 속성을 사용 가능해짐
"""sub class"""
def __init__(self, car_name, tp, color):
super().__init__(tp, color)
self.car_name = car_name
def show_model(self) -> None:
return "your car name: %s" % self.car_name
class Benz(car): #car의 모든 속성을 사용 가능해짐
"""sub class"""
def __init__(self, car_name, tp, color):
super().__init__(tp, color)
self.car_name = car_name
def show_model(self) -> None:
return "your car name: %s" % self.car_name
def show(self):
print(sueper().show())#parent call
return 'car info : %s %s %s' % (self.car_name, self.type, self.color)
#일반 사용
model1 = BMW('520d', 'sedan', 'red')
print(model1.color) #super -> red
print(model1.type) #sueper -> sedan
print(model1.car_name) #sub -> 520d
print(model1.show()) #super -> car class "show method!
print(model1.show_model()) #sub -> your car name: 520d
print(model1.__dict__) #{'type': 'sedan', 'color': 'red'.........}
# Method Overriding(오버라이딩)
model2 = Benz("220d", 'suv', 'black')
print(model2.show()) #super의 show가 아닌 sub에 있는 show를 사용
#parent Method call
model3 = benz('350d', 'sedan', 'red') # -> super, sub 둘 다 출력
#Inheritance Info(상속정보를 list타입으로)
print(BMW.mro()) #-> [<class '__main__.BMW'>, <class '__main__.car'>, <class 'object'>]#상속정보를 불러들임
#다중상속 2
class x():
pass
class y():
pass
class z():
pass
class A(x,y):
pass
class B(y,z):
pass
class M(B, A, Z):
pass
print(M.mro()) #-> m, b, a, x, y, z, object
'python' 카테고리의 다른 글
SQLite 연동, 테이블 생성, 데이터 삽입 (0) | 2020.04.20 |
---|---|
python 외부 파일 처리 - Excel, CSV 읽기 쓰기 (0) | 2020.04.18 |
python 기초 - 예외 처리 (0) | 2020.04.18 |
python 기초 - 파일 읽기, 파일쓰기 (0) | 2020.04.18 |
python 기초 - 모듈, 패키지 (0) | 2020.04.18 |