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(23))  # 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

+ Recent posts