Python

Python 강좌7 클래스

크레이지J 2018. 3. 27. 00:29
반응형


+클래스 

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