반응형


+클래스 

class 클래스명:
     def __init__(self, 파라미터,...):
          ...
     def 메서드1(self, 파라미터,...):
          ...
__init__ ; 생성자

__del__ ; 소멸자


class Man:
     def __init__(self, name):
          self.params={}
          self.name=name
          print("aa")
    
     def hi(self):
          print("hi "+self.name+"!")
     
     def setAge(self, a):
          self.params['age']=a

    def __del__(self):
          pass

m=Man("jj")          # 생성자 호출!  
m.hi()
del m          # m객체 소멸. 소멸자 호출!
-------------------------------------------------------------------------

class SumClass:
     def __init__(self, name):     // constructor
          self.name=name 
     def sum(self, a, b ):     // 첫번째 인자는 self로 해야 한다.
          result=a+b
a = SumClass("jane')
a.sum(1,2)

-------------------------------------------------------------------------------

class Fib:
     '''iterator that yields numbers in the fibonacci sequence'''

     def __int__(self, max):
          self.max = max          #     instance에서의 global 변수. self.*
     def __iter__(self):
          self.a=0
          self.b=1
          return self
     def __next__(self):
          fib = self.a
          if fib > self.max:
               raise StopIteration
          self.a, self.b = self.b, self.a+self.b
          return fib

빈 클래스 정의시, 문법적 오류를 피하기 위해 내용에 pass 라고 쓴다. 나중에 작업할 때 사용.

class PapayaWhip:
     pass


+클래스의 객체 생성 ; 클래스명(constructor)으로 함수 호출처럼 한다.

f = Fib(100)
for i in f :
    print( i, end=“ “)
에러없이 마지막까지 출력된다.




+ 클래스 상속  ; 클래스 선언시 뒤에 (parent) 를 추가한다.

class B(A):
    pass

A클래스로부터 상속받는다.

ex)
class Person:
    def __init__(self, name, age, gender):
          self.Name = name
          self.Age= age
          self.Gender = gender
    def aboutme(self):
          pass
class Employee(Person):
     def __init__(self, name, age, gender, salary):
          super().__init__(self, name, age, gender)     # Person._init__(..)을 사용해도 되나, 다중상속시 중복실행되는 것을 막기위해 super를 사용한다.
         self.Salary=salary
    def work(self):
          pass

   
+ 다중 상속도 지원한다.
class Child(ParentOne, ParentTwo):
..




+ 연산자 오버로딩

아래와 같이 미리 정의된 함수를 중복 정의하여 사용한다.

__add__(self, other)
__mul__(self, other)
__sub__(self, other)
...

피연산자의 순서가 뒤바뀐 경우도 지원하려면?
함수이름에 r을 붙인 것을 정의한다.
__add__=__radd__
__sub__=__rsub__
__mul__=__rmul__

n=numbox(100)
n+100
100+n



+ 클래스 메소드 class method   ; 첫 번째 인자가 cls 로 클래스를 의미.
@classmethod
def change_raise_amount(cls, rate):
     cls.raise_rate=rate
     

+static method     ; cls 객체가 없다.
@staticmethod
def is_work_day(day):
     return True



'Python' 카테고리의 다른 글

Python JSON 사용하기  (0) 2018.04.10
Python 외부 모듈사용.time,string,random, try except  (0) 2018.04.09
Python 강좌6 tuple, set, dictionary  (0) 2018.03.21
Python 강좌5 List  (0) 2018.03.20
Python 강좌4 정규식 regular expression  (0) 2018.03.19

+ Recent posts