행위

"파이썬 클래스"의 두 판 사이의 차이

DB CAFE

(파이썬 클래스)
(클래스 상속)
225번째 줄: 225번째 줄:
 
child = Child2()
 
child = Child2()
 
child.money()
 
child.money()
</souce>
+
</source>
  
 
위의 내용을 읽었다면 그리고 자바로 개발하는 개발 유저라면 pyhton의 클래스 상속도 바로 이해될 것이다.
 
위의 내용을 읽었다면 그리고 자바로 개발하는 개발 유저라면 pyhton의 클래스 상속도 바로 이해될 것이다.

2020년 3월 12일 (목) 22:24 판

thumb_up 추천메뉴 바로가기


1 파이썬 클래스[편집]

1.1 파이썬은 모든 자료형 타입이 class 이다.[편집]

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

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

파이썬은 java 와 마찬가지로 객체지향 프로그래밍이므로 class의 활용이 매우 중요함.

1.2 class 선언[편집]

class Entity:

pass

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


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

Entitiy sample = new Entity();

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

python 에서는

>>>> sample = Entity()

type(sample)
<class '__main__.Entity'>
>>>>

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

1.3 생성자[편집]

# -*- 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("dbcafe","test@gmail.com","01012345678")
sample.pring_info()

java entity 만들어보고 getter setter 지겹게 만들어 봤다면 다음 코드를 따로 설명없이 이해가 된다. 여기서 좀 확실하게 알고가고 싶다면 이것만 기억하면 된다.


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


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


1.4 네임스페이스[편집]

>>> 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


1.5 클래스 상속[편집]

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의 클래스 상속도 바로 이해될 것이다.



1.6 예제 사칙연산 클래스[편집]

class ClassCalc:

    def __init__(self, first, second):
        self.first = first
        self.second = second

    def setdata(self, first, second):
        self.first = first
        self.second = second

    def add(self):
        result = self.first + self.second
        return result

    def mul(self):
        result = self.first * self.second
        return result

    def sub(self):
        result = self.first - self.second
        return result

    def div(self):
        result = self.first / self.second
        return result