Growth Hoon

20231120_TIL_{Python_Class : [ 생성자 오버라이딩 ], Python_Function : [ 함수의 여러 매개변수 ] ,백준 : [1024번 문제] } 본문

TIL_Today I Learned

20231120_TIL_{Python_Class : [ 생성자 오버라이딩 ], Python_Function : [ 함수의 여러 매개변수 ] ,백준 : [1024번 문제] }

sayhoon 2023. 11. 20. 08:57

Python Class 생성자 오버라이딩

 

부모 Class에서 상속받아 생성하는 자식 Class에서 생성자 오버라이딩 할 때

super().__init__() 에서 arguments 의 default 값이 없으면 값을 넣어주어야 한다.

# 부모 Class 생성
class Parents():
    parants_num = 0 # Class 변수
    def __init__(self, arg1, arg2, arg3): # 생성자
        self.arg1 = arg1 # instance 변수 (인스턴스 변수)
        self.arg2 = arg2
        self.arg3 = arg3
        Parents.parants_num += 1 # Class 변수에 1을 넣어주어서 Parents Class가 몇개 생성 되었는지 확인

    def talk(self,text): # Class 내 함수 
        self.text = text

# 상속 (자식 Class 생성)
class Children(Parents):
    children_num = 0
    def __init__(self,arg1,arg2,arg3):
        super().__init__(1,2,3) ## 생성자 오버라이딩
        ## super()를 통해서 생성자 오버라이딩 할 때, 인자(Arguments)값을 넣어주어야 함.
        ## 안 넣어주면 안되더라구 
        Children.children_num += 1
    
mother = Parents(1,2,3)
father = Parents(2,3,4)
print(f"Parants Class number : {mother.parants_num}")

son1 = Children(1,2,3)
son2 = Children(2,3,4)

print(f"Children Class number : {son2.children_num}")

 

부모 Class에서 Arguments들의 default값을 지정해주면 아래와 같이 arguments값을 안 넣어주어도

생성자 오버라이딩이 가능하다

# 부모 Class 생성
class Parents():
    parants_num = 0 # Class 변수
    def __init__(self, arg1=None, arg2=None, arg3=None ): # 생성자
        self.arg1 = arg1 # instance 변수 (인스턴스 변수)
        self.arg2 = arg2
        self.arg3 = arg3
        Parents.parants_num += 1 # Class 변수에 1을 넣어주어서 Parents Class가 몇개 생성 되었는지 확인

    def talk(self,text): # Class 내 함수 
        self.text = text

# 상속 (자식 Class 생성)
class Children(Parents):
    children_num = 0
    def __init__(self,arg1,arg2,arg3):
        super().__init__() ## 생성자 오버라이딩
        Children.children_num += 1
    
mother = Parents(1,2,3)
father = Parents(2,3,4)
print(f"Parants Class number : {mother.parants_num}")

son1 = Children(1,2,3)
son2 = Children(2,3,4)

print(f"Children Class number : {son2.children_num}")

 


Python 함수에서 사용하는 매개변수에 대해서

1. 일반적인 매개 변수 사용 방법

## 일반적인 함수 사용
def func1(arg1, arg2):
    sum_ = arg1 + arg2
    return sum_

def func2(arg1 = 1, arg2 = 2):
    sum_  = arg1 + arg2
    return sum_

print(f"function1_result = {func1(1,2)} // function2_result = {func2()}")

 

2. 위치 가변 매개변수 사용 방법

## 위치 가변 매개변수
# -> arguments로 몇개의 값이 들어가도 상관이 없음 // *arg에서 매개변수는 튜플 형태로 들어가게 됨.
def func3(*arg):
    sum_ = 0
    print_type = type(arg)
    for i in arg:
        sum_ += i
    return sum_, print_type
print(f"function3_resunlt = {func3(1,2,3,4,5,6,7,8,9,10)[0]} // *arg type = {func3(1,2,3)[1]}")

## 위치 가변 매개변수 오류나는 방법
def func4(*arg, arg1,arg2):
    sum_ = arg1 + arg2
    return sum_
# print(f"Expectation 3 But result {func4(1,2)}") ## Error 발생 *arg로 값을 다 받기 떄문이다.
print(f"{func4(arg1 = 1,arg2 = 2)}") ## 위 함수를 사용하기 위해서는 키워드 지정방식으로 사용해야 한다.

 

3. 키워드 가변 매개변수 

## 키워드 가변 매개변수
# python dictionary 형태로 argument 값을 받는다
def func5(**kwargs):
    print_type = type(kwargs)
    for key, value in kwargs.items():
        print((key,value) ,end = ' ')
    print(print_type)
func5(name = 'Sayhoon', age = 26, gender = 'male')


백준 1024번 문제 - 순열의 합 {스스로 못 품}

[블로그 참조] - https://star7sss.tistory.com/948

 

[문제 링크] - https://www.acmicpc.net/problem/1024

# 입력
N, L = map(int, input().split())

# 탐색
for n in range(L, 101):
    x = N/n - (n+1)/2
    if int(x) == x:
        x = int(x)
        if x + 1 >= 0:
            for i in range(x+1, x+n+1):
                print(i, end=" ")
            break
else:
    print(-1)