파이썬 스페셜 메소드 #1

정은경·2020년 4월 25일
0

1. 학습 목표

2. 학습 내용

# Special Method
# Magic Method
# 파이썬 고급개념에서 반드시 알아야 하는 개념!!
# 파이썬 작동원리를 이해하기 위해서는 반드시 알야함!!
# 참조1: https://docs.python.org/3/reference/datamodel,html#special-method-names
# 참조2: https://www.tutorialsteacher.com/python/magic-method-in-python


# 매직메소드 실습
# 파이썬의 중요한 핵심 프레임워크! sequence/iterator/function/class


# 매직메소드 기초 설명
# 매직메소드란?
# 이미 파이썬 내부에서 만들어진 어떤 연산자들을
# 부모로부터 오버로딩해서 사용할 수 있도록 미리 만들어 둔 메소드의 집합을 의미

# 기본형
# print(int) # <class 'int'>

# 모든 속성 및 메소드 출력
# dir로 조회 했을 때, 언더바(_)두개로 시작하는 메소드를 매직메소드 또는 파이썬 스페셜 메소드라고 함!
# print(dir(int))
"""
['__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__', 'bit_length', 'conjugate', 'denominator', 'from_bytes',
'imag', 'numerator', 'real', 'to_bytes']
"""

# 사용
n = 100
# print('EX1-1', n + 200) # EX1-1 300
# print('EXT-2', n.__add__(200)) # EXT-2 300
# print('EX1-3', n.__doc__)
"""
EX1-3 int([x]) -> integer
int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments
are given.  If x is a number, return x.__int__().  For floating point
numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string,
bytes, or bytearray instance representing an integer literal in the
given base.  The literal can be preceded by '+' or '-' and be surrounded
by whitespace.  The base defaults to 10.  Valid bases are 0 and 2-36.
Base 0 means to interpret the base from the string as an integer literal.
>>> int('0b100', base=0)
4
"""
# print('EX1-4', n.__bool__()) # EX1-4 True
# print(bool(n)) # True
# print('EX1-4', n * 100, n.__mul__(100)) # EX1-4 10000 10000



# 클래스를 만들어서 매직메소드의 활용법을 증명해보자
# 파이썬은 객체와 객체의 관계로 나타낼 수 있
# 클래스 예제
class Student:
    def __init__(self, name, height):
        self._name = name
        self._height = height

    def __str__(self):
        return 'Student Class Info : {}, {}'.format(self._name, self._height)

    # 파이썬이 이미 만든 매직 메소드를 오버로딩
    def __ge__(self, x):
        print('Called. >> __ge__ Method.')
        if self._height >= x._height:
            return True
        else:
            return False

    def __le__(self, x):
        print('Called >> __le__ Method.')
        if self._height <= x._height:
            return True
        else:
            return False

    def __sub__(self, x):
        print('Called >> __sub__ Method.')
        return self._height - x._height



# 인스턴스 생성
s1 = Student('James', 181)
s2 = Student('Me', 165)

# print(s1+s2) # 에러 발생
"""
Traceback (most recent call last):
  File "/Users/marie/PycharmProjects/untitled1/baek.py", line 82, in <module>
    print(s1+s2)
TypeError: unsupported operand type(s) for +: 'Student' and 'Student'
"""

# print(s1._height > s2._height) # True


# 매직메소드 출력
# print('EX2-1 :', s1 >= s2)
"""
Called. >> __ge__ Method.
EX2-1 : True
"""
# print('EX2-2 :', s1 <= s2)
"""
Called >> __le__ Method.
EX2-2 : False
"""
# print('EX2-2 :', s1 - s2)
"""
Called >> __sub__ Method.
EX2-2 : 16
"""

# 

3. 느낀 점

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글