[python] class inheritance, initialize, argument 정리

우선 기본 예제를 보자

부모 class : TestClassA
자식 class : TestClassB

TestClassA에는 Class variable “Name” 이 있다.
TestClassB를 사용할 것이다.
아래와 같이 arguments를 넘겼다.

TestClassB에서 TestClassA의 상속과 함께 __init__ 하는 방법은 두 가지가 될 수 있는데, (super를 사용하는 방법도 있으나 생략)
1. TestClassA.__init__(self,Name)
2. TestClassA.__init__(self,*args, **kwargs)

1의 경우엔 TestClassA 에서 선언된

Name이라는 class 변수를 전달 받는 것이다.

2의 경우엔 TestClassA로 ClassTestB를 부를 때
( Tb = TestClassB(Name, Company, Config=Config) )
넘긴 인자들을 고대로 받는 것이다.
이 경우에 TestClassA의 arguments를 받는 부분도 아래와 같이 수정되어야 한다.

전체를 몽땅 넘겨받아서 적절히 알아서 쓰는 방식이다.
혼자서 사용하기 편할 수는 있을 것 같은데.. 장, 단점이 있어보인다.

Arguments – *args 와 **kwargs
예제를 수행하면 알 수 있지만,
args에는 입력된 일반 변수가 넘어오고, kwargs에는 dictionary 형태의 것들이 넘온다.

예제를 보면 이해가 쉽다.

위 예제에서 args 와 kwargs의 결과는 아래와 같다.

이것을 요렇게 Tb = TestClassB(Name, Company, a=4, b=3) 바꿔보면,
결과

요렇게도 Tb = TestClassB(Name, Company, [], "") 바꿔보면?

이제야 느낌이 온다..

Leave a Reply