class Car():
def __init__(self, company, details):
self.company=company
self.details=details
# car1 instance 생성
car1=Car('Hyundai', 300)
print(car1)
# ==== 출력 ==== #
<__main__.Car object at 0x위치>
Car.car_cnt
, car1.car_cnt
두 방법 모두 사용해서 접근할 수 있다.class Car:
def __init__(self, car_name):
self._car_name=car_name
# Static Method
@staticmethod
def is_bmw(inst):
if inst._car_name == 'Bmw':
return 'Ok! This car is {}'.format(inst._car_name)
car1=Car('Bmw')
print(Car.is_bmw(car1))
# ===== 출력 ===== #
Ok! This car is Bmw
__
를 PREFIX로 선언Class Hello
를 상속 했을 때에도, 감추어져있다.현재까지의 한계
_<Class Name>
+ __
를 PREFIX로 선언class Student:
def __init__(self, name):
self._name=name
def whatIsMyName(self): # self
print(self._name)
__dict__
: 네임스페이스 확인dir(obj)
: 네임스페이스의 key값 확인num=8
print( dir(num) )
# ===== 출력 ===== #
['__abs__', '__add__', '__and__', '__bool__', \
'__ceil__', '__class__', '__delattr__', '__dir__', \
'__divmod__', '__doc__', '__eq__', '__float__', '__floor__', \
'__floordiv__', '__format__', '__ge__', '__getattribute__', \
'__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', \
'__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', \
'__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', \
'__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', \
'__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', \
'__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', \
'__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', \
'__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', \
'__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', \
'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
# =============================================================================== #
a = 1000
class A():
def __init__(self):
pass
def __cal__(self,y):
global a
a = a /y
return a
print(dir(A))
# ===== 출력 ===== #
['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', \
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', \
'__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', \
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', \
'__sizeof__', '__str__', '__subclasshook__', '__weakref__' ]
num
은 <class 'int'>
의 인스턴스 이고, int
클래스의 magic method 로 __add__()
가 있는 것!__add__
)를 오버라이드해서 사용해보자.__str__(self)
print( )
에서 object를 찍으면, object의 위치 주소가 나오기 때문에, 불편할 수도 있다.__str__(self)
메소드를 사용하자.print( object )
를 했을 때, return 값을 STDOUT으로 표시한다.print
출력은, __str__
을 사용한다.__repr__(self)
__repr__
을 사용해야한다.__str__
처럼 print( ) 를 사용했을 때, 어떠한 값을 보여 줄지 결정한다.__call__
__init__
, __del__
class Dog:
def __init__(self):
# constructor = 생성자
생성하면서 할 행동
def __del__(self):
# destructor = 소멸자
소멸할 때 할 행동
list[idx]
도 그렇고 list도 그렇고 객체도 del 객체 하면 파괴됨obj.__dict__
obj.__dict__
에서 dictionary형태로 관리된다.self.company
, self.details
는 아래처럼 dictionary 형태로 관리된다.obj.__slots__
: Member를 제한함. 메모리 사용량 감소obj.__doc__
obj.__name__
, obj.__code__
, obj.__file__
import inspect
def line_no():
return inspect.getlineno(inspect.getouterframes(inspect.currentframe())[-1][0])
if __name__ == '__main__':
print(line_no())
<ClassName>.mro()
로 확인가능ClassC.mro()
: [<class '__main__.ClassC'>, <class '__main__.ClassA'>, <class '__main__.ClassB'>, <class 'object'>]
ClassC.mro()
: [<class '__main__.ClassC'>, <class '__main__.ClassA'>, <class '__main__.ClassB'>, <class 'object'>]
이다.__get__(self)
, __set__(self)
, __delete__(self)
중 하나라도 사용하는 'Class'__get__
, __set__
메서드가 자동 호출__get__
n2=Sample.y
(Sample Class의 클래스 인스턴스(static field)) 접근Sample.y
는 Descriptor type인 클래스(__get__
, __set__
)임__get__
혹은 __set__
을 호출 (원래 그럼)__get__(self)
: argument가 1개임 -> Error!__get__
에 args 3개를 만들어보자.idx
, 멤버 이름 접근operator
모듈 사용from operator import itemgetter, attrgetter
class Word:
def __init__(self, name):
self.name=name
self.len=len(self.name)
def __repr__(self):
return repr((self.word))
if __name__ == '__main__':
word_list=list()
list.append(Word('단어'))
word_list=sorted(word_list, key=attrgetter('len')) # len 기준으로 sort
for i in range(0, len(word_list)):
print(word_list[i].name)
abstract class
: 추상 클래스abc
모듈 (abstract base class)