클래스 속성 오버라이드

매일 공부(ML)·2023년 1월 13일
0

Fluent Python

목록 보기
64/130

객체지향 상용구

파이썬스러운 객체

클래스 속성 오버라이드

객체 속성의 기본값으로 사용하는 것은 파이썬의 독특한 특징으로, Vector2d클래스에는 typecode라는 클래스 속성이 있고, 이 속성은 bytes() 메서드에서 두 번 사용되고, 단지 self.typecode로 그 값을 읽습니다. Vector2d 객체가 그들 자신의 typecode 속성을 가지고 생성된 것이 아니므로, self.typecode는 기본적으로 Vector2d.typecode 클래스 속성을 가져온다.


존재하지 않는 객체 속성에 값을 저장하고, 새로운 객체 속성을 생성하고 동일한 이름의 클래스 속성은 변경하지 않고, 객체가 self.typecode를 읽을 때 객체 자체의 typecode를 가져오므로, 동일한 이름의 클래스 속성을 가리게 되어 각 객체가 서로 다른 typecode를 갖도록 커스터마이즈할 수 있다.


<br>


#클래스에서 상속받은 typecode 속성을 설정해서 객체 커스터마이즈하기
from vector2d_v3 import Vector2d
v1 = Vector2d(1.1, 2.2)
dumpd = bytes(v1)
dumpd
len(dumpd)
v1.typecode='f'
dumpf = bytes(v1)
dumpf
len(dumpf)
Vector2d.typecode

#ShortVector2d는 기본 typecode만 덮어쓴 Vector2d의 서브클래스다.
from vector2d_v3 import Vector2d
class ShortVector2d(Vector2d):
	typecode = 'f'
    
sv =ShortVector2d(1/11, 1/27)
sv
len(bytes(sv))

class_name을 하드코딩했다면 단지 class_name을 변경하기 위해서 ShortVector2d와 같은 Vector2d 서브 클래스의 repr() 메서드도 변경해야하고, 객체의 type에서 이름을 읽어오도록 만듦으로써 이 클래스를 상속하더라도 repr()을 안전하게 사용할 수 있다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글