Data/Python

[Python 문법] Python 객체 지향

gangmin 2024. 4. 9. 13:28

Python은 객체 지향 언어이다. 그렇기 때문에 상속을 지원하고, Class를 제공한다. 다른 객체 지향과 동일하게 Class는 참조타입이기 때문에 메모리 영역 중 힙 영역에 할당되게 되며, 메모리 주소를 통해서 내부 값을 변경할 수 있다. 추후 메모리 관리 방법에 대한 학습을 할 때, 더욱 자세하게 알아보려고 한다.

문법

Python에서 Class는 일반적인 언어와 동일하게 class 키워드를 통해서 생성할 수 있다. 다른 언어들과 다르게 생성자를 따로 제공하지 않고, 함수의 형식으로 생성자를 제공한다는 점이 특이했다.

class Dog:
    attribute = "mammal"
    
    def __init__(self, name):
        self.name = name
      
    def speak(self):
        print("my name is {}".format(self.name))

Rodger = Dog("Rodger")
Rodger.speak()

""" 출력
my name is Rodger
"""

attribute 와 같이 클래스가 가져야 하는 고유의 값인 클래스 변수를 생성할 수 있다.

상속

참조 타입의 가장 중요한 상속에 대해서 알아보자. 상속은 상위 객체의 특성을 물려 받아서 사용할 수 있도록 하는 것이다. 즉, 상속을 통해서 추가적인 작업 없이 동일한 메서드를 호출할 수 있게 된다. 또한, 다른 작업을 위해서 재정의할 수도 있다.

class Person:
    def __init__(self, name, idNumber):
        self.name = name
        self.idnumber = idNumber
        
    def display(self):
        print(self.name)
        print(self.idnumber)
        
class Employee(Person):
    def __init__(self, name, idNumber, salary, post):
        self.salary = salary
        self.post = post
        Person.__init__(self, name, idNumber)
        
    def details(self):
        print("My Name is {}".format(self.name))
        print("IdNumber is {}".format(self.idnumber))
        print("Post is {}".format(self.post))
        
employee = Employee("Rahul", 886012, 200000, "Intern")

employee.display()
employee.details()

""" 출력
Rahul
886012
My Name is Rahul
IdNumber is 886012
Post is Intern
"""

메서드를 재정의하는 것은 상속을 받는 클래스의 속성에 따라서 메서드를 다르게 만들 때 사용할 수 있다. 우리는 이것을 다형성이라고 부른다.

class Bird:
    def intro(self):
        print("There are many types of birds.") 
    def flight(self):
        print("Most of the birds can fly but some cannot.")
        
class sparrow(Bird):
    def flight(self):
        print("Sparrows can fly")

class ostrich(Bird):
    def flight(self):
        print("Ostriches cannot fly")
        
obj_bird = Bird()
obj_spr = sparrow()
obj_ost = ostrich()

obj_bird.intro()
obj_bird.flight()

obj_spr.intro()
obj_spr.flight()

접근 제어

클래스를 생성하면서 내부적으로만 사용해야 하는 변수가 있을 수 있다. 이는 __ 를 붙여서 정의할 수 있다. 접근 제어를 비공개 수준으로 변경할 수 있게 된다.

# '__' 를 통해서 비공개 변수를 생성할 수 있다. 이는 상속한 클래스에서도 접근하지 못하게 된다.

class Base:
    def __init__(self):
        self.a = "GeeksforGeeks"
        self.__c = "GeeksforGeeks"
        
class Derived(Base):
    def __init__(self):
        Base.__init__(self)
        print("Calling private member of base class")
        print(self.__c)
        
object = Base()
print(object.a)

## Derived는 __c라는 값에 접근할 수 없기 때문에 오류가 발생한다.
## object = Derived()
## print(object.a)

 

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

[Python 문법] 오류 처리  (0) 2024.04.09
[Python 문법] Python 기초 문법  (0) 2024.04.08