
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형태로 관리된다.
Class의 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())









super() 를 이용한 부.모.클.래.스의 생성자 Activate<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)

재재 상속해 override해보자.