출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
# Chapter06_01
# 클래스 (ㅋㅋ붕어빵기계)
# OOP(객체 지향 프로그래밍), self, 인스턴스 메소드, 인스턴스 변수


# 클래스와 and  인스턴스의 차이를 이해하는 것이 중요
# 네임스페이스 : 객체를 인스턴스화 할 때 저장된 공간
# 클래스 변수 : 직접 접근 가능, 공유 (정수기! 공용화장실! 같은 것 ㅋㅋ)
# 인스턴스 변수 : 객체마다 별도 존재.

# 예제1)
# class dog():, class dog:, class(object):
class dog(): #object 상속
    # 클래스 속성
    specied = 'firstdog' #클래스 변수.

    # 초기화/인스턴스 속성 (java생성자)
    def __init__(self,name, age):
        self.name = name
        self.age = age


# 클래스 정보
print(dog)

# 인스턴스화 (- 코드로 구현해서 메모리에 올라간 시점.)
a = dog('happy',15)
b = dog('micky',2)
c = dog('micky',2)
# 비교
print(a == b, id(a), id(b))
print(a == c, id(b), id(c))

# 네임스페이스
print('dog1',a.__dict__)
print('dog2',b.__dict__)

# 인스턴스 속성 확인
print('{} is {} and {} is {}'.format(a.name, a.age, b.name, b.age))

if a.specied == 'firstdog':
    print('{0} is a {1}'.format(a.name, a.specied))

print(dog.specied) # 클래스에서도
print(a.specied) # 인스턴스변수에서도 바로 접근 공유 가능하다. (같은값.)


# 예제2) - self의 이해. (this같은 느낌인듯)

class SelfTest:
    def func1():
        print('func1 called')
    def func2(self): #__init__이 없어도 알아서 생성해주는 똑쟁이 파이썬..
        print(id(self)) #f값.
        print('func2 called')

f = SelfTest()

print(dir(f)) #func1과 func2가 있음을 확인 가능
print(id(f))

# f.func1() 에러! 예외.
f.func2() # self가 있는 인스턴스 메서드
SelfTest.func1() # 클래스로바로 접근해서 접근. (매개변수가 없는 클래스메소드)
                # self가 있으면 인스턴스화 시킨 변수가 self로 넘어감.
# SelfTest.func2() 반대로 에러! 예외
SelfTest.func2(f)


# 예제3)
# 클래스 변수, 인스턴스 변수

class Warehouse:
    #클래스 변수
    stock_num = 0 #재고

    def __init__(self, name):
        # 인스턴스 변수
        self.name=name
        Warehouse.stock_num +=1

    def __del__(self):
        Warehouse.stock_num -=1

user1 = Warehouse('Lee')
user2 = Warehouse('Jin')

print(Warehouse.stock_num) # 붕어빵 몇개구웠어! = 2개

print(user1.name)
print(user2.name)
print(user1.__dict__)
print(user2.__dict__)
print('before>>',Warehouse.__dict__) #stock_num:2

del user1
print('after>>',Warehouse.__dict__)

# 예제4

class dog2():
    specied = 'firstdog'

    def __init__(self,name, age):
        self.name = name
        self.age = age

    def info(self):
        return '{} is {} years old'.format(self.name, self.age)

    def speak(self, sound):
        return "{} says {}!".format(self.name, sound)

# 인스턴스 생성
d = dog2('july',4)
e = dog2('merry',10)

# 메서드 호출
print(d.info())
print(e.info())
print(d.speak('wal wal'))
print(e.speak('mung mung'))

+ Recent posts