以下是一個單向關聯的例子,在下方的類別圖中,1個學生「擁有」0張或多張證照。撰寫學生類別時,記得在建構元中增加一個可以「關連」到自己的證照之屬性,藉以建立起兩個類別之間的關係。
class Student:
'''
學生類別
屬性:
(1)學號, id
(2)姓名, name
(3)擁有的證照, certificates
'''
def __init__(self, id, name):
self.__id = id
self.__name = name
self.__certificates = [] #「關連」到自己的證照
@property
def id(self): return self.__id
@id.setter
def id(self, id): self.__id = id
@property
def name(self): return self.__name
@name.setter
def name(self, name): self.__name = name
def add_certificate(self, certificate):
'''
傳入: 一個證照物件
處理: 將傳入證照加入自己擁有的證照
'''
if certificate not in self.__certificates:
self.__certificates.append(certificate)
return True
else:
return False
def list_certificate(self):
'''
處理: 回傳自己擁有的所有證照
'''
t = ''
for c in self.__certificates:
t+=c.title + ' '
return f'{self.id} {self.name} 共有{len(self.__certificates)}張證照, 包括:{t}'
class Certificate:
'''
證照類別
屬性:
(1)證照名稱, title
'''
def __init__(self, title):
self.__title = title
@property
def title(self): return self.__title
@title.setter
def title(self, title): self.__title = title
#----------------------
# 建立學生物件
#----------------------
s1 = Student('1001', '王小明')
s2 = Student('1002', '陳小華')
#----------------------
# 建立證照物件
#----------------------
c1 = Certificate('全民英檢')
c2 = Certificate('日文N1')
c3 = Certificate('ITS Python')
#----------------------
# 建立學生和證照之間的關聯
#----------------------
s1.add_certificate(c1)
s1.add_certificate(c2)
s2.add_certificate(c1)
s2.add_certificate(c2)
s2.add_certificate(c3)
#----------------------
# 印出學生的證照
#----------------------
print(s1.list_certificate())
print(s2.list_certificate())
1001 王小明 共有2張證照, 包括:全民英檢 日文N1
1002 陳小華 共有3張證照, 包括:全民英檢 日文N1 ITS Python