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 |