Class
클래스는 c++에서 자세히 다뤘으므로,
해당 내용에 대해 파이썬 문법만 알아보도록 하자.
__init__
, constructor
class Student:
def __init__(self, givenID, givenName):
self.id = givenID
self.name = givenName
def setId(self, givenID):
self.id = givenID
def getId(self):
return self.id
def setName(self, givenName):
self.name = givenName
def getName(self):
return self.name
student1 = Student(20190001, "Harry Potter")
student2 = Student(20190002, "Hermione Granger")
print(student1.getId())
print(student1.getName())
print(student2.getId())
print(student2.getName())
20190001
Harry Potter
20190002
Hermione Granger
__str__()
기본적으로 내가 만든 클래스의 모든 내용을 알아볼 수 있게
관용적으로 만들어주는 함수이다.
class Student:
def __init__(self, givenID, givenName):
self.id = givenID
self.name = givenName
def setId(self, givenID):
self.id = givenID
def getId(self):
return self.id
def setName(self, givenName):
self.name = givenName
def getName(self):
return self.name
def __str__(self):
msg = "id:{}, name:{}".format(self.id, self.name)
return msg
student1 = Student(20190001, "Harry Potter")
student2 = Student(20190002, "Hermione Granger")
print(student1.getId())
print(student1.getName())
print(student2.getId())
print(student2.getName())
20190001
Harry Potter
20190002
Hermione Granger
id:20190002, name:Hermione Granger
클래스 변수
class Student:
# Class variables
countStudent = 0
def __init__(self, givenID, givenName):
# Instance (or Object) variables
self.id = givenID
self.name = givenName
Student.countStudent = Student.countStudent + 1
def setId(self, givenID):
self.id = givenID
def getId(self):
return self.id
def setName(self, givenName):
self.name = givenName
def getName(self):
return self.name
def __str__(self):
msg = "id:{}, name:{}".format(self.id, self.name)
return msg
def getNumOfStudent():
return Student.countStudent
print(Student.getNumOfStudent())
student1 = Student(20190001, "Harry Potter")
student2 = Student(20190002, "Hermione Granger")
print(student1)
print(student2)
print(Student.getNumOfStudent())
20190001
Harry Potter
20190002
Hermione Granger
id:20190002, name:Hermione Granger
2
2
Private Attribute
클래스를 설계할 때, 사람이 변수에 접근하는데 있어서
직접적인 접근을 막고 싶다! 이 때 c++ 에서는 private
를 사용했는데,
여기서는 좀더 직관적으로 변수에 __
를 추가해주면 된다.
class Student:
# Class variables
__countStudent = 0
def __init__(self, givenID, givenName):
# Instance (or Object) variables
self.__id = givenID
self.__name = givenName
Student.__countStudent = Student.__countStudent + 1
def setId(self, givenID):
self.__id = givenID
def getId(self):
return self.__id
def setName(self, givenName):
self.__name = givenName
def getName(self):
return self.__name
def __str__(self):
msg = "id:{}, name:{}".format(self.__id, self.__name)
return msg
def getNumOfStudent():
return Student.__countStudent
student1 = Student(20190001, "Harry Potter")
student2 = Student(20190002, "Hermione Granger")
print(student1.getId())
print(student1.getName())
print(student2.getId())
print(student2.getName())
print(student2.__str__())
print(Student.getNumOfStudent())
print(Student.getNumOfStudent())
print(Student.__countStudent)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-15-949f5d70643a> in <module>
43 print(Student.getNumOfStudent())
44
---> 45 print(Student.__countStudent)
AttributeError: type object 'Student' has no attribute '__countStudent'
내가 직접적으로 __countStudent
에 접근했기 때문에 에러가 뜬다.
상속
상속받는 방법을 알아보자!
class GraduatedStudent(Student):
def __init__(self, givenId, givenName, givenYear):
self.__graduatedYear = givenYear
super().__init__(givenId, givenName)
def __str__(self):
msg = super().__str__() + ", graduation:{}".format(self.__graduatedYear)
return msg
student1 = GraduatedStudent(20190001, "Harry Potter", 2023)
print(student1)
id:20190001, name:Harry Potter, graduation:2023
super()
함수가 굉장히 신기한데,
바로 상속받은 클래스에 접근할 수 있는 메서드이다.
has-a Relationship
특정 클래스를 포함하는 클래스가 있을 수 있다.
부모자식 관계처럼 피를 나누지는 않아도 묶어놓을 수는 있다.
class Department:
def __init__(self):
memberStudent = Student()
memberStudent 를 __init__
함수안에 변수로 선언해주면 된다.