728x90
반응형
Class
- 클래스(Class): 객체를 만드는 구조/틀
- 객체(Object)
- 객체 = 속성(attribute) + 기능(method)
- 객체 = 변수 + 함수
Class Variable
- 클래스와 인스턴스 전체가 공유하는 변수
Class Method
- 클래스와 인스턴스 전체가 공유하는 함수
인스턴스(Instance)
클래스가 실질적으로 실체화될 때(메모리에 할당되어 사용될 때) 그 객체를 부르는 용어
- 클래스 선언
- 클래스 호출을 통한 객체 할당
# Class 선언
class MyClass():
class_var = '클래스 변수'
def __init__(self, v1, v2):
self.v1 = v1
self.v2 = v2
@classmethod
def class_method(cls):
print("클래스의 메소드")
def instance_method(self):
self.instance_var = '인스턴스 변수'
print("인스턴스 메소드")
# Class Instance 생성
my_class = MyClass("v1","v2")
print(my_class)
>> <__main__.MyClass object at 0x1593234>
Instance Variable
- instance 고유의 변수
Instance Method
- instance에 적용되는 함수
- 인스턴스 메소드의 매개변수 중 가장 첫번째는 인스턴스 자신(self)
- self: 인스턴스는 위함 placeholder, 객체 자신을 가리킴
__name__
- 인스턴스 생성될 때 객체를 할당, 인스턴스 이름 참조
__init__(생성자)
- 인스턴스가 생성될 때 객체의 초기값을 설정하는 method로 자동으로 호출됨
__del__(소멸자)
- 인스턴스가 소멸될 때 자동으로 호출되는 메소드
# 클래스 이름 참조
클래스명.__name__
# 클래스 내부에서 클래스 이름 참조
self.__class__.__name__
# 클래스 변수 참조
클래스명.변수명
# 클래스 내부에서 클래스 변수 참조
self.__class__.변수명
Class Inheritance
- 부모의 클래스를 물려받음
- 부모 클래스가 가지고 있는 함수/변수를 그대로 사용할 수 있음
- 기존 클래스를 변형하지 않고 추가/변경 가능
Method Overriding
- 상속을 받은 자식 클래스가 상속해준 부모 클래스의 메소드를 변형하는 방법
- 부모 클래스의 소스 코드는 그대로 유지한 채 소스코드를 확장할 수 있음
super()
- 자식 클래스 내에서 부모클래스를 호출
class Parent():
def __init__(self, a ,b):
self.a = a
self.b = b
def parent_func(self):
print("parent function")
class Child(Parent):
def __init__(self, a, b, c):
super().__init__(a, b)
# python2, 3 버전 공통 스타일
# super(Child, self).__init__(a, b)
self.c = c
def parent_func(self):
print("Function Overring")
ch = Child(1,2,3)
ch.parent_func()
print(ch.a)
print(ch.b)
print(ch.c)
>>
Function Overring
1
2
3
Design Pattern
Decoration Pattern (데코레이션 패턴)
함수의 객체와 함수를 변경하는 다른 객체의 wrapping을 허용
class C(object):
@my_decorator
def method(self):
# method 내용
# ==> 아래와 같은 의미를 갖는다.
class C(object):
def method(self):
# method 내용
method = my_decorator(method)
@classmethod
- method를 클래스 method로 변환
- 첫 번째 인수로 클래스(cls)를 사용
- cls: class를 위한 placeholder
@staticmethod
- method를 정적 method로 변환
- 첫 번째 인수로 cls나 self가 없음
class A(object):
_hello = True
def foo(self, x):
print("foo({0}, {1}) 실행".format(self, x))
@classmethod
def class_foo(cls, x):
print("class_foo({0}, {1}) 실행".format(cls, x, cls._hello))
@staticmethod
def static_foo(x):
print("static_foo({0}) 실행".format(x))
a = A()
a.foo(1)
a.class_foo(2)
A.class_foo(2)
a.static_foo(3)
A.static_foo(3)
>>
foo(<__main__.A object at 0x0000022AE13054F0>, 1) 실행
class_foo(<class '__main__.A'>, 2) 실행
class_foo(<class '__main__.A'>, 2) 실행
static_foo(3) 실행
static_foo(3) 실행
Observer Pattern
@property
- 특정 값을 유지하는 핵심 객체를 갖고, 직렬화된 객체의 복사본을 생성하는 일부 옵서버가 있는 경우 유용
- 객체의 one-to-many 의존 관계에서 한 객체의 상태가 변경되면, 그 객체에 종속된 모든 객체에 그 내용을 통지하여 자동으로 상태를 갱신하는 방식
class C:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, new_name):
self._name = "{0} >> {1}".format(self._name, new_name)
c = C("진")
print(c._name)
print(c.name)
c.name = "아스틴"
print(c.name)
>>
진
진
진 >> 아스틴
진 >> 아스틴
References
728x90
반응형
'Python > Python 기초' 카테고리의 다른 글
[Python] Python Built-in Functions (0) | 2021.02.24 |
---|---|
[Python] Python Exception Handling (0) | 2021.02.24 |
[Python] Python File (0) | 2021.02.23 |
[Python] Python Function (0) | 2021.02.23 |
[Python] Python Flow Control (0) | 2021.02.22 |