반응형
14.Class.
Class Feature.
Class는 객체=인스턴스를 생성하기 위해 필요.
객체 지향 프로그래밍(OOP)을 위해 사용.
==> 추상화,캡슐화,상속,다형성.
프로그램의 유지보수를 편리하게 만든다.
파이썬의 모든 데이터, 함수 ==> 객체.
Class는 속성,메소드,생성자,소멸자 등이 influenced.
cf) 공통적인 객체 지향 언어의 특징.
Create a class.
class Allblack: ==> Allblack class를 생성.
pass
Python에서는 Class Keyword로 Class를 생성.
Pass는 아무것도 안하는 Class, 함수를 만들 때 사용.
class Allblack: name = "Allblack" def info(self): print('내 id는', self.name, '이다!')
r = Allblack() type(r)r.info() 내 id는 Allblack이다! r.name 'Allblack' isinstance(r,int) False isinstance(r,Allblack) True
메소드의 첫 번째 인자로 self를 전달.
객체가 만들어질 때 호출되는 함수를 생성자 => _init_ called.
생성자는 객체를 초기화 할 때 자주 사용.
상속 받고싶은 부모 클래스를 괄호 안에 입력.
상속을 받으면 부모 클래스의 모든 내용이 자식에게 전달 되는데, 즉 코드 재사용.
Python은 기본적으로 직접 속성에 접근 O.
속성 이름 앞에 UnderBar 2개를 쓰면 외부에서 속성, 변수에 접근 X.
Get, Set 함수를 사용하여 속성을 다뤄야 한다.
메소드는 기본적으로 self를 전달하는 인스턴스 메소드.
@classmethod, @staticmethod를 사용해서 클래스 메소드를 만든다.
Self는 하나의 Class에서 만들 여러 객체 = 인스턴스를 구별하기 위해 사용.
Cf) 물론 다른 이름을 사용해도 된다.
isinstance()를 사용해서 어느 클래스의 객체인지 확인.
class Allblack: name = "Allblack" age = 0 def __init__(self, name, age): print('생성자 호출!') self.name = name self.age = age def __del__(self): print('소멸자 호출!') def info(self): print('나의 이름은', self.name, '이다!') print('나이는', self.age, '이다!')
r = Allblack('Allblack',100) 생성자 호출! r.info() 나의 이름은 Allblack이다! 나이는 100이다! del r 소멸자 호출!
객체가 사라질 때 호출되는 함수를 소멸자 => _del_ called.
Class inheritance.
class Allblack: name = 'Allblack' age = 0 def __init__(self, name, age): print('Allblack 생성자 호출!') self.name = name self.age = age def __del__(self): print('Allblack 소멸자 호출!') def info(self): print('나의 이름은', self.name, '이다!') print('나이는', self.age, '이다!') class strong_Allblack(Allblack): weapon = 'gun' def __init__(self, name, age, weapon): print('Allblack 생성자 호출!') super().__init__(name, age) self.weapon = weapon def info(self): #Overidding. super().info() print(self.weapon, '로 싸운다!')
s = strong_Allblack('Allblack',100,'Gun') strong_Allblack 생성자 호출! Allblack 생성자 호출! s.info() 나의 이름은 Allblack이다! 나이는 100이다! Gun로 싸운다!
자식 클래스에서 부모 클래스 메소드를 사용하기 위해 super()를 사용.
부모 클래스가 제공하는 메소드를 자식 클래스가 재정의 할 수 O. => 오버라이딩.
Cf) Python은 다중 상속을 지원 => ,(comma로 구분하여 나열).
Get, Set method functions.
class test: data = 10
t = test() t.data 10
class test: __data = 10 def getData(self): return self.__data def setData(self, data): self.__data = data
t = test() t.getData() 10 t.setData(20) t.getData() 20 t._data ==> Error.
Class Methods VS Instance Methods.
class test: data = 10 # 클래스 속성 def __init__(self, data): self.data = data # 인스턴스 속성 @classmethod def printClass(cls): # 클래스 메소드 print(cls.data) def printInstance(self): # 인스턴스 메소드 print(self.data)
클래스 메소드는 클래스 이름으로 함수를 호출 할 수 O => test.printClass()
클래스 속성, 메소드는 모든 객체가 공유.
반응형
'#Programming Language > Python' 카테고리의 다른 글
16.Selection,Bubble Sort,EOF. (0) | 2018.05.14 |
---|---|
15.Inheritance. (0) | 2018.05.14 |
13.Module. (0) | 2018.05.14 |
12.Repeat. (0) | 2018.05.13 |
11. IF. (0) | 2018.05.13 |