생성자


파이썬의 생성자는 단지 멤버 초기화의 목적으로 쓰입니다. 그렇기에 생성자명은 __init__으로 고정되어있습니다.

class Person():
    def __init__(self):
        pass

 

클래스에서 __init__() 메서드의 첫 번째 파라미터는 무조건 self여야 합니다. 'self'는 C++, Java에서의 'this'와 같습니다.

 

 

 

상속


위의 예제에서 '어라?'하는 부분이 있으신가요? 클래스명 뒤에 () 괄호가 있는데요, 이는 상속을 위한 파이썬의 문법입니다. 

class Person():
    def __init__(self, name):
        self.name = name
       
class Professor(Person):
    def __init__(self, name):
        self.name = "Professor " + name
        
class Student(Person):
    def __init__(self, name):
        self.name = "Student " + name

 

 

 

getter/setter 메서드


C++, Java에는 멤버변수를 private 접근 지정자로 설정하고, getter/setter 메서드를 이용해 멤버변수를 접근/설정합니다. 하지만, 파이썬은 private 접근 지정자가 없고 모든 멤버변수, 멤버함수는 public 접근 지정자를 가집니다. 아무리 그렇다지만 멤버변수에 직접 접근하는건 아무래도 찝찝합니다. 따라서, 다음과 같이 getter/setter 메서드를 정의할 수 있습니다.

class MyObject():
    def __init__(self, input_name):
        self.hidden_name = input_name
        
    def get_name(self):
        print("Called get_name")
        return self.hidden_name
        
    def set_name(self, input_name):
        print("Called set_name)
        self.hidden_name = input_name
        
    name = property(get_name, set_name)

 

위의 예제에서 마지막 라인은 매개변수로 들어온 두 메서드를 'name'이라는 속성의 property로 정의합니다. property() 전역함수의 첫 번째 인자는 getter 메서드, 두 번째 인자는 setter 메서드입니다. property로 등록을 하면 다음과 같이 접근/설정할 수 있게됩니다.

>>> a = MyObject('HongGilDong')
>>> a.name  # () 함수 호출 연산자 없이 property로 호출합니다.
Called get_name
'HongGilDong'

>>> a.name = "HerryPoter"  # 등록한 'name' property에 대입 연산자를 통해 값을 설정할 수 있습니다.
Called set_name

 

'Programming > Python' 카테고리의 다른 글

[Python] 파일 입출력  (0) 2019.06.11
[Python] private 네임 맹글링  (0) 2019.06.10
[Python] 클로저(Closure)  (0) 2019.06.07
[Python] 컴프리헨션(Comprehension)  (0) 2019.06.07
[Python] list, tuple, dictionary, set 자료구조  (0) 2019.06.05