티스토리 뷰

class Foo:
    def __init__(self):
        pass
    def getx(self):
        return self.x

foo = Foo()
foo.x = 1
print(foo.getx())

C++ 로 위와 같이 코드를 작성했으면 foo.x = 1 라인에서 아래와 같은 오류가 출력됐을것이다.

error: ‘class Foo’ has no member named ‘x’

 

근데 Python 에서는 에러가 안난다. 저렇게 하면 없던 멤버변수 x 가 생긴다.

 

실제 사용 예

YOLOv8 에서 nn.Sequential 클래스의 객체에 i, f, type 이라는 멤버변수를 위 방법을 이용해 정의한다.

 

https://github.com/ultralytics/ultralytics/blob/main/ultralytics/nn/tasks.py#L458

 

GitHub - ultralytics/ultralytics: YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/ultralytics development by creating an account on GitHub.

github.com

그리고 이를 _forward_once 라는 함수에서 쓴다.

 

아래 코드에서 m 이라는 변수가 nn.Sequential 레이어의 객체인데 이 객체가 i, f 라는 멤버 변수를 가지고 있던가? 싶었는데 보니까 본 포스트에서 소개한 해괴한 멤버 변수 정의 방법을 활용한것이였다...

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함