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

猜你喜欢

转载自www.cnblogs.com/dinghanhua/p/9975554.html