나의 공부 일기

Python) Object 클래스 본문

파이썬/파이썬 정리

Python) Object 클래스

곽병권 2023. 10. 24. 11:10
728x90

Object 클래스란 파이썬에서 가장 기본적인 클래스를 말합니다.

모든 클래스가 가져야할 메서드를 정의하고 있습니다.

 

object 클래스에 정의된 메서드들입니다.

[]로 감싸져있는 것들은 필수요소가 아닙니다.

  • __new__(cls[ , ...]):                          객체 생성 시에 호출되는 메서드로, 해당 클래스의 인스턴스를 생성하고 변환시킴
class exam:
    def __new__(cls, *args):
        print("cls :", cls)
        print('new :', args)
        return super().__new__(cls)


obj = exam(1, 2, 3)
print(obj)

>>>
cls : <class '__main__.exam'>
new : (1, 2, 3)
<__main__.exam object at 0x000001F7943C7350>

여기서 *args는 여러 인자를 한번에 받게하는 파라미터 입니다.

 

  • __init__(self[ , ...]):                           객체 초기화 시에 호출되는 메서드로, 인스턴스 변수를 초기화하는 역할을함
class exam:
    def __new__(cls, *args):
        print("cls :", cls)
        print('new :', args)
        return super().__new__(cls)

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


obj = exam("Kwak", 24)
print(obj)

>>>
cls : <class '__main__.exam'>
new : ('Kwak', 24)
 
__init__ : <__main__.exam object at 0x000001B71FF97810>
name : Kwak
age : 24
<__main__.exam object at 0x000001B71FF97810>
  • __str__(self):                                   객체를 문자열로 표현할 때 호출되는 메서드로, 해당 객체의 문자열 표현을 반환함
class exam:
    def __new__(cls, *args):
        print('__new__')
        print("cls :", cls)
        print('new :', args)
        return super().__new__(cls)

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

    def __str__(self):
        print()
        print('__str__')
        return f"{self.name} : {self.age}"


obj = exam("Kwak", 24)
print(obj)

>>>
__new__
cls : <class '__main__.exam'>
new : ('Kwak', 24)

__init__ :
name : Kwak
age : 24

__str__
Kwak : 24
  • __repr __(self):                                객체를 나타내는 문자열을 반환하는데, 이 문자열로 해당 객체를 완벽하게                                                                    재 생성할 수 있어야 함.
class exam:
    def __init__(self, x, y):
        print('__init__ :')
        self.x = x
        self.y = y

    def __repr__(self):
        print()
        print('__repr__')
        return f'exam({self.x}, {self.y})'


ex = exam(1, 2)
print(repr(ex))

>>>
__init__ :

__repr__
exam(1, 2)
  • __eq __(self,other):                          객체의 동등성 비교시에 호출되는 메서드로, 다른 객체와 같은지 비교함
class exam:
    def __init__(self, x, y):
        print('__init__ ')
        self.x = x
        self.y = y

    def __eq__(self, other):
        print()
        print('__eq__')
        return self.x == other.x and self.y == other.y


ex1 = exam(1, 2)
ex2 = exam(1, 2)
print(ex1 == ex2)

>>>
__init__
__init__

__eq__
True
  • __hash__(self):                                객체의 해시값을 반환. 해시값은 해당 객체를 딕셔너리의 키로 사용할 때 필요함
class exam:
    def __init__(self, name, age):
        print('__init__ ')
        self.name = name
        self.age = age

    def __hash__(self):
        print()
        print('__hash__')
        return hash((self.name, self.age))


ex1 = exam("Kwak", 24)
ex2 = exam("Kwak", 24)
print(hash(ex1))
print(hash(ex2))

>>>
__init__
__init__

__hash__
3499423490990093925

__hash__
3499423490990093925
  • __getattr __(self,name):                   객체에서 해당 속성을 찾을 수 없을 때 호출되는 메서드. 속성을 동적으로                                                                       생성하거나 다른 속성으로  대체할 수 있음
class exam:
    def __init__(self, name, age):
        print('__init__ ')
        self.name = name
        self.age = age

    def __getattr__(self, name):
        print()
        print('__getattr__')
        if name == "fullname":
            return f"{self.name} : {self.age}"
        else:
            raise AttributeError(f"'exam' 개체에 속성이 없습니다. '{name}'")


ex = exam("Kwak", 24)
print((ex.fullname))
print((ex.fullnama))

>>>
__init__

__getattr__
Kwak : 24
AttributeError: 'exam' object has no attribute'fullnama'
  • __setatter __(self,name,value):        객체의 속성을 할당할 때 호출되는 메서드. 속성값을 설정하거나 다른 작업을                                                                  수행할 수 있음
class exam:
    def __init__(self, name, age):
        print('__init__ ')
        self.name = name
        self.age = age

    def __setattr__(self, name, value):
        print()
        print('__setattr__')
        if name == "age":
            if not isinstance(value, int):
                raise ValueError(f"Age 는 정수여야 합니다.")
        super().__setattr__(name, value)


ex = exam("Kwak", 24)
ex.age = 10
print(ex.age)

ex.age = 'five'

>>>
__init__

__setattr__

__setattr__

__setattr__
10

__setattr__
ValueError: Age must be an integer
  • __delattr __(self,name):                     객체의 속성을 할당할 때 호출되는 메서드. 해당 속성을 삭제하거나 다른 작업을                                                             수행할 수 있음
class exam:
    def __init__(self, name, age):
        print('__init__ ')
        self.name = name
        self.age = age

    def __delattr__(self, name):
        print()
        print('__delattr__')
        if name == "age":
            raise AttributeError(f"age'속성을 삭제할 수 없습니다.")
        else:
            super().__delattr__(name)


ex = exam("Kwak", 24)
del ex.name
print(ex.name)

del ex.age

>>>
__init__

__delattr__
AttributeError: 'exam' object has no attribute 'name'

AttributeError: age'속성을 삭제할 수 없습니다.
  • __dir __(self):                                      객체의 속성 목록을 반환. dir() 내장 함수의 작동 방식을 제어하는 메서드임
class exam:
    def __init__(self, name, age):
        print('__init__ ')
        self.name = name
        self.age = age

    def __dir__(self):
        print()
        print('__dir__')
        return ["name","age","fullname"]

ex = exam("Kwak", 24)
print(dir(ex))


>>>
__init__

__dir__
['age', 'fullname', 'name']
  • __class __(self):                                  객체의 클래스를 반환
class exam:
    def __init__(self, name, age):
        print('__init__ ')
        self.name = name
        self.age = age


ex = exam("Kwak", 24)
print(ex.__class__)

>>>
__init__
<class '__main__.exam'>
  • __format __(self,format_spec):            객체를 포맷팅할 때 호출되는 메서드로, format() 함수와 str.format() 메서드의                                                                 작동 방식을 제어함
class exam:
    def __init__(self, x, y):
        print('__init__ ')
        self.x = x
        self.y = y

    def __format__(self, format_spec):
        print()
        print('__format__')
        if format_spec == 'r':
            return f"({self.y} , {self.x})"
        else:
            return f"({self.x} , {self.y})"

    def __str__(self):
        print()
        print('__str__')
        return f"[{self.x}, {self.y}]"


ex = exam(1, 2)
print(format(ex))
print(format(ex, 'r'))
print(ex)

>>>
__init__

__format__
(1 , 2)

__format__
(2 , 1)

__str__
[1, 2]
728x90

'파이썬 > 파이썬 정리' 카테고리의 다른 글

Python) 파이썬 내장함수들  (0) 2023.10.26
Python) Exception - 예외처리  (1) 2023.10.25
Python) getter/setter  (0) 2023.10.23
Python) 정보은닉(Information Hiding)  (1) 2023.10.20
Python) 함수 / 메서드  (0) 2023.10.19