기록하는삶

[파이썬/python] 이미 존재하는 object(class)에 method 추가하기(functools.partial()) 본문

AI/파이썬(Python)

[파이썬/python] 이미 존재하는 object(class)에 method 추가하기(functools.partial())

mingchin 2022. 1. 26. 00:53
728x90
반응형

처음부터 만든 것이 아니라 상속 받아왔거나, import 해와서 Class를 생성하는 코드에 접근은 어렵지만 부분적으로 특정 method를 추가하고 싶은 경우 활용할 수 있는 방법이다.

 

functools.partial() 함수를 사용하면 되는데, 파이썬 공식 문서에는 다음과 같은 설명이 있다.

추가적으로 args와 kargs를 던지면 해당 인자들을 추가한 새로운 함수를 반환해준다. 이를 이용해 아래처럼 이미 존재하는 Class에 method를 추가해볼 수 있다.

from functools import partial
class Dog():
    def __init__(self, name):
        self.name = name


d = Dog('Fido')
e = Dog('Buddy')
def bark(self):                 # normal function
    print('Woof! %s is barking' % self.name)

e.bark = partial(bark, e)       # pre-bound and stored in the instance
e.bark()                        # access like a normal method

# 출력: Woof! Buddy is barking

다른 방법으로는 'setattr' 함수를 이용해 아래와 같이 표현할 수도 있다.

def add_method(obj, func):
    'Bind a function and store it in an object'
    setattr(obj, func.__name__, partial(func, obj))
    
add_method(d, bark)
d.bark()

# 출력: Woof! Fido is barking

아래의 stack overflow 내용을 가져온 것임을 밝힙니다.

https://stackoverflow.com/questions/30294458/any-elegant-way-to-add-a-method-to-an-existing-object-in-python/30294947

 

Any elegant way to add a method to an existing object in python?

After a lot of searching, I have found that there are a few ways to add an bound method or unbound class methods to an existing instance objects Such ways include approaches the code below is taki...

stackoverflow.com

 

728x90
반응형