본문 바로가기

프로그래밍언어/Python

[Python] Magic method - 속성 관리

반응형

1. object.__getattr__(self, name)

 

객체의 attribute 에 접근이 실패하여 AttributeError 가 발생하면 호출된다. AttributeError 는 해당 attribute가 객체나 클래스에 존재하지 않는 경우 __getattribute__() 메서드 등에 의해 발생한다. 이때 예외처리를 통해서 특정한 속성 값을 반환할 수도 있고, 따로 처리가 없는 경우 동일하게 AttributeError를 반환하도록 할 수도 있다.

 

만약 정상적으로 attribute 가 반환되는 경우에는 __getattr__() 메서드가 호출되지 않는다. 만약 attribute 접근에 대한 완전한 조작을 하기 위해서는 아래의 __getattribute__() 메서드를 사용하면 된다.

 

 

2. object.__getattribute__(self, name)

 

__getattr__() 메서드보다 선순위에서 실행되는 메서드로 클래스에 __getattr__() 와 함께 구현되어 있는 경우, 명시적으로 __getattr__() 를 호출하거나 __getattribute__() 메서드에서 AttributeError를 일으키지 않으면 __getattr__() 메서드가 실행되지 않는다.

 

 

3. object.__setattr__(self, name, value)

 

Attribute 를 객체에 대입할 때 호출된다. Name 은 attribute 의 이름이고 value 는 해당 attribute 에 대입하려는 값이 된다. 기존에 name 의 이름을 가지는 attribute 가 존재하는 경우 value 로 값을 변경하고, 없는 경우에는 새롭게 name 이라는 attribute 를 생성하여 value 를 할당한다.

 

 

4. object.__delattr__(self, name)

 

__setattr__() 과 유사하지만 대입이 아니라 삭제 시에 호출되는 메서드이다. 이 메서드는 del obj.name 이 해당 객체에서 정상적으로 수행 되는 경우에만 구현되어야 한다. 기존에 존재하지 않는 attribute 를 삭제하려고 하면 AttributeError 가 발생한다.

 

 

5. object.__dir__(self)

 

객체에 dir([object]) 메서드가 사용되는 경우에 호출된다. dir() 메서드의 결과가 되는 시퀀스를 반환하는데, dir() 는 해당 시퀀스를 리스트로 변환한 후 정렬하여 결과로 반환한다. 

반응형

'프로그래밍언어 > Python' 카테고리의 다른 글

[Python] module, package, library  (0) 2022.02.11
[Python] copy  (0) 2022.02.08
[Python] Magic method - 객체 표현  (0) 2021.12.15
[Python] Magic method - 객체 생성, 초기화  (0) 2021.12.15
[Python] urlparse  (0) 2021.10.16