1. 程式人生 > >python入門17 類和物件

python入門17 類和物件

類:一類事物的抽象化。概念:

類的變數(屬於類的變數,定義在類的開始處)  成員變數(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