python 메소드 매개변수 매커니즘

maintain·2020년 10월 5일
0

결론

파이썬에서는 인스턴스 메소드를 일반 함수처럼 호출하는 것이 가능합니다. 다르게 말하자면 첫 위치 매개변수가 인스턴스인 일반 함수가 메소드라고 볼 수 있습니다. 다음 클래스로 간단한 실험을 해봅시다.

class Test:
    def __init__(self):	
       	print('hi')
        
    def test1(self, a):
    	print(self)
        print(a)
        
    def test2(a):
        print(a)
    
    def test3(*args, **kargs):
    	print(args)
        print(kargs)
    
    def test4(**kargs)
    	print(kargs)

인스턴스의 경우

>>> ist= Test() ## instance를 줄여 ist로 썼다.
hi
>>> ist.test1('hi')
<__main__.Test object at 0x7feb85e6df70>
hi
>>> ist.test2('hi')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test2() takes 1 positional argument but 2 were given
>>> ist.test3('hi')
(<__main__.Test object at 0x7feb85e6df70>, 'hi')
{}
>>> ist.test4(hi = 'hi')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: t4() takes 0 positional arguments but 1 was given

test1 메소드는 가장 일반적인 용례라고 볼 수 있습니다. 여기서 ist 인스턴스가 0x7feb85e6df70에 위치한 것을 일단 알 수 있습니다. 그리고 test2, test3, test4를 통해 모두 우리가 입력한 hi외의 추가적인 위치 매개변수로 self가 들어간 것을 확인할 수 있습니다.

클래스의 경우

>>> Test.t1('hi')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: t1() missing 1 required positional argument: 'a'
>>> Test.test2('hi')
hi
>>> Test.test3('hi')
('hi',)
{}
>>> Test.test4(hi = 'hi')
{'hi': 'hi'}

위와 다르게 self 자리에 hi가 대신 들어간 것을 확인할 수 있습니다. test2의 경우 일반함수와 다를 게 없이 동작한 것을 확인할 수 있습니다.

0개의 댓글