ํด๋์ค๋ 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.countStudentprint(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.__countStudentstudent1 = 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__ ํจ์์์ ๋ณ์๋ก ์ ์ธํด์ฃผ๋ฉด ๋๋ค.
Exercise
inputdata1.csv ์ inputdata2.csv ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ sample.csv์ ๊ฐ์ ํํ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ผ.
myFile ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํ์ดํด๋ผ.
inputdata1.csv
ID,Name
20190001,Apple
20190003,Pear
20190002,Orange
inputdata2.csv
ID,Class1,Class2,Class3
20190003,90,90,98
20190002,45,12,37
20190009,10,10,10
20190001,89,92,35
sample.csv
ID,Name,Course 1,Course 2,Course 3,Average
20190001,Apple,89,92,35,72
20190002,Orange,45,12,37,31
20190003,Pear,90,90,98,92
ํ์ด
# ANSWER : START
import csv
class myFile:
def __init__(self, fileName = None, fileMode = None):
self.__fileName = fileName
self.__fileMode = fileMode
self.__fileList = []
if self.__fileMode == "r" and self.__fileName != None:
self.file = open(self.__fileName, self.__fileMode)
read_file = csv.reader(self.file)
for line in read_file:
self.__fileList.append(line)
self.__fileList[1:] = sorted(self.__fileList[1:])
elif self.__fileMode == "w" and self.__fileName != "":
self.file = open(self.__fileName, self.__fileMode)
def getStatus(self):
if self.__fileList != [] or self.__fileMode == "w":
return True
else:
print("ํ์ผ์ด ์ด๋ฆฌ์ง ์์์ status = false")
return False
def getBody(self):
if self.getStatus() == True:
return self.__fileList[1:]
else:
print("ํ์ผ์ด ์ด๋ฆฌ์ง ์์ body ์ถ๋ ฅ์ด ๋ถ๊ฐํฉ๋๋ค.")
return False
def setContentHead(self,fileHeader = None):
if self.getStatus() == True and fileHeader != None:
self.__fileHeader = fileHeader
return True
else:
print("fileHeader ๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋, ํ์ผ์ด ์ด๋ฆฌ์ง ์์์ต๋๋ค.")
return False
def setContentBody(self, fileContent = None):
if self.getStatus() == True and fileContent != None:
self.__fileContent = fileContent
return True
else:
print("fileContent ๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋, ํ์ผ์ด ์ด๋ฆฌ์ง ์์์ต๋๋ค.")
return False
def writeFile(self):
if self.getStatus() == True:
myWriter = csv.writer(self.file)
myWriter.writerow(self.__fileHeader)
for i in range(len(self.__fileContent)):
myWriter.writerow(self.__fileContent[i])
return True
else:
print("ํ์ผ์ด ์ด๋ฆฌ์ง ์์์ต๋๋ค.")
return False
def closeFile(self):
if self.getStatus() == True:
self.file.close()
return True
else:
print("ํ์ผ์ด ์ด๋ฆฌ์ง ์์์ต๋๋ค.")
return False
def mergeList(li1, li2):
result = []
temp = []
for i in range(len(li1)):
for j in range(len(li2)):
if li1[i][0] == li2[j][0]:
temp = []
temp.append(li1[i][0])
temp.append(li1[i][1])
temp.append(li2[j][1])
temp.append(li2[j][2])
temp.append(li2[j][3])
sum = 0
for k in range(1,4):
sum = sum + int(li2[j][k])
temp.append(str(int(sum/3)))
result.append(temp)
result = sorted(result)
return result
# ANSWER : END
file1 = myFile("inputdata1.csv", 'r')
file2 = myFile("inputdata2.csv", 'r')
if (file1.getStatus() != False) and (file2.getStatus() != False):
newList = mergeList(file1.getBody(), file2.getBody())
file3 = myFile("output.csv", 'w')
file3.setContentHead(["ID", "Name", "Course 1", "Course 2", "Course 3", "Average"])
file3.setContentBody(newList)
file3.writeFile()
file3.closeFile()
else:
print("input file error")
file1.closeFile()
file2.closeFile()