본문 바로가기
  • Where there is a will there is a way.
개발/python

파이썬 class 에 대하여

by 소확행개발자 2018. 12. 3.

파이썬 class 에 대하여


파이썬은 모든 자료형 타입이 class 이다.


>>> type(3) <class 'int'> >>> type(3.1) <class 'float'> >>> type('3') <class 'str'> >>> type([]) <class 'list'> >>> type(()) <class 'tuple'> >>>



심지어 function 도 class로 되어있다.


파이썬은 java 와 마찬가지로 객체지향 프로그래밍이므로 class의 활용이 굉장히 중요하다.


class 선언

class Entity:

pass


로 선언한다. pass 키워드를 사용하면 클래스 내부에 아무것도 넣지 않은 상태로 클래스를 정의할 수 있다.


class 는 java 와 마찬가지로 사용하려면 인스턴스를 생성해야 한다.


흔히 우리가 


Entitiy sample = new Entity(); 


로 자바에서 인스턴스를 생성하고


python 에서는


>>>> sample = Entity()

type(sample)

<class '__main__.Entity'>

>>>>


로 () 를 사용하여 인스턴스를 생성한다고 보면 된다.


생성자

# -*- coding: utf-8 -*-

class Entitiy:
def __init__(self,name, email, phone):
self.name = name
self.email = email
self.phone = phone

def pring_info(self):
print("Name : ", self.name)
print("E-mail :", self.email)
print("phone : ", self.phone)



sample = Entitiy("derekpark","derekpark@overnodes.com","010xxxxxxxx")
sample.pring_info()


java entity 만들어보고 getter setter 지겹게 만들어 봤다면 다음 코드를 따로 설명없이 이해가 된다.


여기서 좀 확실하게 알고가고 싶다면 


이것만 기억하면 된다.


java 유저들은 self 가 눈에 밟힐 텐데 self가 바로 Entity 클래스가 만든 sample 인스턴스다.

 

print로 이 self의 id(self)를 찍어보면 id(sample)과 같은 값이 나오는걸 확인할 수 있다.


네임스페이스

>>> class Stock: market = "kospi"

>>> dir() ['Stock', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']


>>> Stock.market 'kospi'


>>> s1 = Stock() >>> s2 = Stock() >>> id(s1) 50572464 >>> id(s2) 50348240


class 에 namespace를 설정하면 dir() 와 아래 그림에서 보이는 바와 같이 메모리를 차지한다.




>>> s1.__dict__ {} >>> s2.__dict__ {}


>>> s1.market = 'kosdaq' >>> s1.__dict__ {'market': 'kosdaq'}


>>> s1.market 'kosdaq' >>> s2.market 'kospi'


아래서 의아한 점은 s2 는 선언을 안해줬는데 kospi를 가지고 있다.


이유는 아래 그림에서 설명될 것 같다.



클래스 변수와 인스턴스 변수

클래스는 생성자와 소멸자가 있다.


생성자는 init 이고 소멸자는 del로 표현한다.


class Entitiy:
title = "test"
def __init__(self,name, email, phone):
self.name = name
self.email = email
self.phone = phone

def __del__(self):
Entitiy.title

def pring_info(self):
print("Name : ", self.name)
print("E-mail :", self.email)
print("phone : ", self.phone)

Entity 클래스에는 title 변수와 name / email / phone 이 있다. 


여기서 title을 클래스 변수라고 하고 self 가 붙어있는 변수들을 인스턴스 변수라고 한다.


나는 처음에 클래스 변수와 인스턴스 변수에 대해서 헷갈렸었는데 위의 내용을 읽어보면 이해가 될거라 생각한다.


앞의 예제 말고도 더 좋은 예제가 있어서 가지고 와봤다.

>>> class Account:
        num_accounts = 0
        def __init__(self, name):
                self.name = name
                Account.num_accounts += 1
        def __del__(self):
                Account.num_accounts -= 1

>>>


>>> kim = Account("kim") >>> lee = Account("lee")


>>> kim.num_accounts 2 >>> lee.num_accounts 2


>>> Account.num_accounts 2


클래스 상속


class Parent:
def money(self):
print("i have money")

mother = Parent()
mother.money()

class Child(Parent):
pass

child = Child()
child.money()
class Child2(Parent):
def money(self):
print("i have plus money")


child = Child2()
child.money()

위의 내용을 읽었다면 그리고 자바로 개발하는 개발 유저라면 pyhton의 클래스 상속도 바로 이해될 것이다.



'개발 > python' 카테고리의 다른 글

대신증권 api 윈도우 구축  (0) 2019.03.31
파이썬 모듈 예제  (0) 2018.11.25
파이썬으로 무엇을 해야하나  (0) 2018.11.15

댓글