1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# 파이썬에서는 클래스 당 하나의 생성자만을 허용
# 자식클래스에서 __init__()를 생략한다면, 부모클래스의 __init__()가 자동호출 됨 -> super() 필요없음
# 파이썬에서는 메서드 오버로딩을 허용하지 않는다.
class Person:
kind = 'Animal' # 클래스 변수, print(Person.kind)
def __init__(self):
print('Person 생성자')
self.name = '홍길동' # 인스턴스 변수
def show(self):
print(Person.kind + ", " + self.name)
class Student(Person): # Java는 다중상속이 불가능, 파이썬과 C++은 다중상속 가능
def __init__(self):
print('Student 생성자')
super().__init__()
# 먄약, 부모클래스의 생성자를 호출하지 않으면, print(temp.name) 실행시 에러발생
# super(Person, self).__init__() 요렇게도 가능, 현재 클래스가 어떤 클래스인지 명확하게 표시하는 방법
self.age = '21'
self.__grade = 'A' # 인스턴스 변수 앞에 __를 붙이면, private이 됨 -> 즉, 클래스 내부에서만 접근할 수 있음 (getter, setter 필요)
def show(self):
# 메소드 오버라이딩, 부모 클래스의 메소드를 자식 클래스에서 재정의
# 부모 클래스의 show()메소드는 무시되고, 자식클래스의 show()메소드가 실행됨
# 부모 메서드를 호출 -> super().show()
print(self.age + ", " + self.__grade)
temp = Student()
# 특수 메소드
# 객체에 대하여 +, -, *, / 와 같은 연산을 적용하면 자동으로 호출됨
class Member:
def __init__(self, name, club):
self.name = name
self.club = club
def __eq__(self, p):
return self.club == p.club
def __str__(self):
info = self.name + ", " + self.club
return info
n1 = Member("너구리", "요트클럽")
n2 = Member("호랑이", "사냥클럽")
if n1 == n2:
print("두 사람의 소속클럽은 동일")
print(n2) # 호랑이, 사냥클럽
print(type(n1)) # <class '__main__.Member'>
print(isinstance(n1, Member)) # True
# 정적메소드 - 클래스에서 직접 접근할 수 있는 메소드
# @classmethod와 @staticmethod
# 주의 : 파이썬에서는 다른언어와는 다르게 정적메소드임에도 불구하고 인스턴스에서도 접근이 가능함
class TestClass:
def instance_method(self, a,b):
return a + b
@classmethod
def class_method(cls, a, b):
return a + b
@staticmethod
def static_method(a, b):
return a + b
print(TestClass.class_method(2, 3)) # 5
# 추상클래스
# 미구현 추상메소드를 한개 이상 가지며, 자식클래스에서 해당 추상 메소드를 반드시 구현해야함
# import abc
from abc import *
class Country(metaclass=ABCMeta):
@abstractmethod
def show(self):
pass
class Japan(Country):
def __init__(self, name, population):
self.name = name
self.population = population
def show(self):
print(self.name, self.population)
n3 = Japan("니뽄", "1억 2천만명")
n3.show() # 니뽄 1억 2천만명
|
cs |
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
(Python) 함수 (0) | 2021.10.19 |
---|---|
(Python) 문자열 (0) | 2021.10.19 |
(Python) 반복문, 조건문 (0) | 2021.10.19 |
(Python) 튜플, 딕셔너리, 집합(set) (0) | 2021.10.18 |
(Python) 리스트(List) (0) | 2021.10.18 |