python入門17 類和物件
阿新 • • 發佈:2018-11-19
類:一類事物的抽象化。概念:
類的變數(屬於類的變數,定義在類的開始處) 成員變數(self.變數)
類的方法( @classmethod,cls引數) 成員方法( self引數 ) 靜態方法(@staticmethod )
私有變數 私有方法 (__打頭的變數或方法,外部不可呼叫。類定義內部可呼叫)
物件:類的例項化,呼叫建構函式__init__()
#coding:utf-8 #/usr/bin/python """ 2018-11-17 dinghanhua 類與物件例項化""" import datetime '''類定義''' class student: school = '大樹幼兒園' #類變數 __lastchangetime = '' #私有變數 '''類變數,屬於類自己的變數。例項化物件時拷貝副本給物件。 可通過類名或物件訪問,但物件.類物件改變只對當前物件生效,通過類名改變對才對類生效''' def __init__(self,name,grade,id,phone=''): #建構函式 self.name = name #成員變數 self.grade = grade self.id= id self.__phone = phone #成員私有變數 self.__score = 0 def print_info(self): #物件方法 self指物件本身 print('學號 is %s,姓名 is %s,年級 is %s,電話 is %s'%(self.id,self.name,self.grade,self.__phone)) def get_score(self): return self.__score def set_score(self,sc): self.__score = sc @classmethod #類方法 def change_schoolname(cls,schoolname): cls.school = schoolname cls.__changetime() #私有方法,內部可呼叫 print('學校名修改成功:%s,修改時間:%s'%(cls.school,cls.__lastchangetime)) @classmethod def __changetime(cls): cls.__lastchangetime = datetime.datetime.now() #私有變數內部可呼叫 @staticmethod #靜態方法 def print_schoolname(): print('學校:',student.school,student.__lastchangetime) def __str__(self): #__xx__()方法為內部的特殊方法 __str__表示可用str()函式 return self.name+self.school
'''例項化物件,呼叫物件方法''' xiaoming = student('小明','小班','201800001',13500000000) xiaohua = student('小花','小班','201800002') xiaoming.print_info() xiaohua.print_info() print(xiaoming.name) #print(xiaoming.__phone) #呼叫物件的私有變數,報錯 'student' object has no attribute '__phone' xiaoming.set_score(100) print(xiaoming.get_score())
'''單個物件改變類變數''' print('物件呼叫類變數:',xiaoming.school) print('類呼叫類變數:',student.school) xiaoming.school = '大樹小學' #僅改變自己的那一份拷貝,不影響其他物件 print('小明修改了xiaoming.school,小明的學校:',xiaoming.school) #大樹小學 print('小明修改了xiaoming.school,小花的學校不變:',xiaohua.school) #不變 print('小明修改了xiaoming.school,student類的school:',student.school) #不變
'''呼叫類方法改變類變數''' student.change_schoolname('大樹幼兒園東部校區') print('修改了student.school:類物件',student.school) #變了 print('修改了student.school:小明的學校 ',xiaoming.school) #還是大樹小學 print('修改了student.school:小花的學校',xiaohua.school) #變了 xiaoming.change_schoolname('我的母校') print('小明通過類方法修改了學校名 類物件:',student.school) #變了 print('小明通過類方法修改了學校名 小明的學校:',xiaoming.school) #還是大樹小學 print('小明通過類方法修改了學校名 小花的學校:',xiaohua.school) #變了
'''呼叫私有變數報錯''' #print('物件呼叫類變數:',xiaoming.__lastchangetime) # 'student' object has no attribute '__address' #print('類呼叫類變數:',student.__lastchangetime)# 'student' object has no attribute '__address' '''python私有變數機制:變數名重整 _classname__私有變數名''' print(student._student__lastchangetime)
'''呼叫私有方法報錯''' #student.__changetime() #xiaoming.__changetime() #student._student__changetime() #私有方法機制:方法名重整
'''靜態方法''' student.print_schoolname() xiaoming.print_schoolname()
'''定義了__str__()方法後可用str()''' print(str(xiaoming))
the end