Soft Ware/python

파이썬 class 에서의 self 이놈에 대해 정의

달려가보자 2012. 3. 12. 20:13

파이썬 class 소스를 보면 self 이라는 놈이 나옵니다

self에 대해서 알려드리겠습니다~~~ ㅎㅎ

자 그럼 파이썬 class 에 대해서 먼저 말씀드리겠습니다

파이썬에서는 class 에 대한 객체를 생성할때에는 c++ 과 다르게 생성합니다 .

C++에서는

class lite
{
                     int Data;
             pulic:
                      void lite() {}
                         void ~lite() {}
                           void set(Data);
                      void get();

 };

lite test;
    
 이런식으로 선언하자나요 파이썬은 좀 다릅니다.

class lite:
 
     def __init__(self):
         pass;
     def __del__(self):
         pass;
     def set(self,Data):
        self.Data = Data;
     def get(self,Data):
       print("instance Data : ", self.Data);

test = lite();

좀 다르죠? ㅎㅎㅎㅎ

파이썬에서 self를 쓰면 인스턴스 공간을 쓴다는 말입니다 .

자 그럼 class 공간에 있는 변수를 알고 싶거나 저장 하고 싶다면 어떻게 해야 할까요?

인스턴스를 할당하고 __class__를 이용하여 사용하면 클래스 안에 데이터 공간을 바꿀수 있습니다.

예제를 보고 이해해 보세요 ^^

class Test:
    data = "Default";
   
i2 = Test();
i1 = Test();
print("i2 data:",i2.data);
print("i1 data:",i1.data);
i1.__class__.data = "song";
print("i2 data :",i2.data);
print("i1 data :",i1.data);
i1.data = 'eunnam';
print("i2 data:",i2.data);
print("i1 data:",i1.data);

출력문 :

i2 data: Default
i1 data: Default
i2 data : song
i1 data : song
i2 data: song
i1 data: eunnam

다 이해 하셨나요? ^^

또 한가지 소스를 보여드릴께요 ~~
str = "Not Class Member";
class GString:
    str="";
    def Set(self,msg):
        self.str = msg;
    def Print(self):
        print(self.str);
    def Print1(self):
        print(str)
test = GString();
test.Print();
test.Print1();    

출력문 :


Not Class Member

자 그럼 설명해 드리겠습니다.  파이썬의 인스턴스 기본적으로 class를 가르키고 있습니다.

그래서 인스턴스 test의 print 같은 경우에는  자기자신의 공간의 str를 함으로서 빈공간이 출력되고

print1 같은경우에는 클래스 안의 str를 가르킴으로서 Not Class Member 가 출력되는것입니다.