반응형

1.개요

class란 객체를 생성하는 틀(template)로 data member라고도 불리는 속성과 동작을 수행하는 method로 구성된다.

클래스로부터 객체를 생성하는 것을 인스턴스화라고 하며, 생성된 인스턴스가 가지고 있는 속성과 메서드는 . 표기법을 사용해서 접근할 수 있다.

class A:
    def methodA(self):
        print("method...")
        
a=A() #인스턴스화
a.methodA() # 클래스 메서드 호출

 

2.상속

상속은 클래스가 가지는 모든 속성과 메서드를 다른 클래스에 물려주는 기법이다. 이때 상속해주는 클래스를 부모 클래스 또는 슈퍼 클래스라고 하고, 상속 받는 클래스를 자식 클래스 또는 서브 클래스라고 한다.

 

class 자식 클래스(부모 클래스1, 부모 클래스2, ...):
    pass

 

class A:
    def methodA(self):
        print("Calling A's methodA")
    def method(self):
        print("Calling A's method")

class B:
    def methodB(self):
        print("Calling B's methodB")
class C(A,B):
    def methodC(self):
        print("Calling C's methodC")
    def method(self):
        print("Calling C's overridden method")
        super().method()
        super().methodB()
c=C()
c.methodA()
c.methodB()
c.methodC()
c.method()

 

실행결과

Calling A's methodA
Calling B's methodB
Calling C's methodC
Calling C's overridden method
Calling A's method
Calling B's methodB

3. class variable 와 instance variable

클래스 내부에 존재하면서 메서드 밖에 정의된 변수를 클래스 변수라고 하며, 클래스의 모든 인스턴스는 클래스 변수를 공유한다. 반면에 인스턴스 변수는 메서드 내부에서 정의되며 변수명 앞에 self가 붙는데 해당 인스턴스에서만 사용할 수 있다.

 

4. class method

class내부에 정의된 함수이다. class method의 첫번째 인수는 self로 정의해야 한다. 이 특별한 self 변수는 객체 자신을 의미한다.

 

class NasdaqStock:
    "Class for NASDAQ stocks""" #doc string
    count = 0 # class variable
    def __init__(self,symbol,price):
        """Constructor for NasdaqStock""" # doc string
        self.symbol = symbol #instance variable
        self.price = price #instance variable
        NasDaqStock.count +=1
        print('Calling __init__({},{:.2f}) > count: {}'.format(self.symbol, self.price, NasdaqStock.count))

    def __del__(self):
        "Destructor for NasdaqStock""" # doc string
        print('Calling __del__({})'.format(self))

 

class A:
    def __init__(self):
        self.result = 10
    
    def methodA(self):
        result =20
        print("Calling A's methodA")
        print("result{}".format(result))

    def method(self):
        print("Calling A's method")
        self.methodA()

class B:
    def __init__(self):
        self.result = 20

    def methodB(self):
        print("Calling B's methodB")

class C(A, B):
    def __init__(self):
        self.result = 30

    def methodC(self):
        print("Calling C's methodC")

    def method(self):
        print("Calling C's overridden method")
        super().method()
        super().methodB()

c = C()
c.methodA()
c.methodB()
c.method()
print(c.result)

수행 결과

Calling A's methodA
result20
Calling B's methodB
Calling C's overridden method
Calling A's method
Calling A's methodA
result20
Calling B's methodB
30

self는 자기 자신을 의미하며 

class 공용 변수를 사용할 경우 self.result와 같이 앞에 self를 붙여줘야 한다.

 

 

반응형

'python > python basic' 카테고리의 다른 글

[python]PyMYSQL  (0) 2022.08.07
[python][graph]sine wave  (0) 2018.12.02
python basic  (0) 2018.11.12
python programming  (0) 2018.11.12
[python][serial]serial port list  (0) 2018.11.12

+ Recent posts