python空类和实例属性赋值空类python类主体没有任何内容,只有pass语句,称为空类。obj.attr属性赋值通过obj.attr= value进行类和实例属性赋值。NO场景描述1类添加属性类添加属性,用于记录数据。实例没属性,实例取类属性。2实例修改属性实例修改 类不可变属性,相互间不影响。实例修改类可变属性,指向同一值,相互影响。3实例新增属性实例新增属性,只属于本实例。实例新增属性,用于 记录数据,一个实例相当于一条记录。综上,类添加属性,用于各个实例共享,通常添加实例共有属性,非个性化属性。实例添加属性,用于记录不 同属性。文件E:\documents\F盘\testclass.pyclass Record:passif __name__ == ''__main__'': # 添加类属性(数据属性) Record.name = ''梯阅线条'' Record.age = ''18'' print(''Record.姓名:{},年龄:{}''.format(Record.name,Record.age)) # 实例 共享类属性 r1 = Record() r2 = Record() print(''r1.姓名:{},年龄:{}''.format(r 1.name,r1.age)) print(''r2.姓名:{},年龄:{}''.format(r2.name,r2.age)) # 修改实例属性,只影响实例本身,根据属性搜索树优先读取实例属性 r1.name = ''r1.name'' r1.age = ''r1. age'' r2.name = ''r2.name'' r2.age = ''r2.age'' print(''Record.姓名:{}, 年龄:{}''.format(Record.name,Record.age)) print(''r1.姓名:{},年龄:{}''.for mat(r1.name,r1.age)) print(''r2.姓名:{},年龄:{}''.format(r2.name,r2.age )) # 实例新增属性只属于当前实例 r1.sex = ''男'' r2.sex = ''女'' try: print(''Record. 姓名:{},年龄:{},性别:{}''.format(Record.name,Record.age,Record.sex)) exc ept Exception as e: print(''Record.姓名:Record.name,年龄:Record.age,性别 :Record.sex.=>{}''.format(e)) print(''r1.姓名:{},年龄:{},性别:{}''.format( r1.name,r1.age,r1.sex)) print(''r2.姓名:{},年龄:{},性别:{}''.format(r2.na me,r2.age,r2.sex))示例# 打开cmd,执行下面示例E:\documents\F盘>python testclas s.pyRecord.姓名:梯阅线条,年龄:18r1.姓名:梯阅线条,年龄:18r2.姓名:梯阅线条,年龄:18Record.姓名 :梯阅线条,年龄:18r1.姓名:r1.name,年龄:r1.ager2.姓名:r2.name,年龄:r2.ageRecord.姓 名:Record.name,年龄:Record.age,性别:Record.sex.=>type object ''Record'' has no attribute ''sex''r1.姓名:r1.name,年龄:r1.age,性别:男r2.姓名:r2.name,年 龄:r2.age,性别:女类属性-dict,class,basesNO属性描述1__dict__类和实例的属性字典。实例无本身属性 则为空。2__class__查看实例所属类。3__bases__查看指定类名的直接超类元组。实例对象没有__bases__属性。文 件E:\documents\F盘\testclass.pyclass Record:passclass MyRecordA(Rec ord): pass class MyRecordB(MyRecordA): pass class MyRecordC(MyRec ordB,MyRecordA): passif __name__ == ''__main__'': Record.name = ''梯阅 线条'' Record.age = ''18'' r1 = Record() r2 = Record() r1.name = ''r1.n ame'' r1.age = ''r1.age'' r1.sex = ''r1.sex'' # __dict__ 属性字典 print('' Record.__dict__.keys()={}''.format(list(Record.__dict__.keys()))) # r1赋值实例,属性字典非空 print(''r1.__dict__.keys()={}''.format(list(r1.__di ct__.keys()))) # r2 空实例,属性字典为空 print(''r2.__dict__.keys()={}''.form at(list(r2.__dict__.keys()))) # __class__ 查看实例所属类 print(''Record. __class__={}''.format(Record.__class__)) print(''r1.__class__={}''.f ormat(r1.__class__)) # __bases__ 查看指定类名的直接超类元组 print(''Record.__b ases__={}''.format(Record.__bases__)) print(''MyRecordA.__bases__={ }''.format(MyRecordA.__bases__)) # MyRecordB 的 直接超类为 MyRecordA,不包括 Record print(''MyRecordB.__bases__={}''.format(MyRecordB.__bases__ )) print(''MyRecordC.__bases__={}''.format(MyRecordC.__bases__)) tr y: print(''r1.__bases__={}''.format(r1.__bases__)) except Exception as e: # 实例对象没有 __bases__ 属性 print(''r1.__bases__={}''.format(e))示例 # 打开cmd,执行下面示例E:\documents\F盘>python testclass.pyRecord.__dict__. keys()=[''__module__'', ''__dict__'', ''__weakref__'', ''__doc__'', ''name '', ''age'']r1.__dict__.keys()=[''name'', ''age'', ''sex'']r2.__dict__.key s()=[]Record.__class__=r1.__class__= _.Record''>Record.__bases__=(,)MyRecordA.__bases__ =(,)MyRecordB.__bases__=( _.MyRecordA''>,)MyRecordC.__bases__=(, )r1.__bases__=''Record'' object has no attribute ''__bases__''类外定义方法可以在class外定义方法,然后给类或实例调用。文件E:\document s\F盘\testclass.pyclass Record:pass# 类外定义方法def printRecord(self): print(''self.姓名:{},年龄:{}''.format(self.name,self.age))if __name__ = = ''__main__'': Record.name = ''梯阅线条'' Record.age = ''18'' r1 = Record( ) r2 = Record() r1.name = ''r1.name'' r1.age = ''r1.age'' # 普通函数使用 p rintRecord(Record) printRecord(r1) printRecord(r2) # 赋值给类进行使用 Re cord.printRec = printRecord Record.printRec(Record) r1.printRec() r2.printRec()示例# 打开cmd,执行下面示例E:\documents\F盘>python testclass.pyself.姓名:梯阅线条,年龄:18self.姓名:r1.name,年龄:r1.ageself.姓名:梯阅线条,年龄:18self.姓名:梯阅线条,年龄:18self.姓名:r1.name,年龄:r1.ageself.姓名:梯阅线条,年龄:18END本文首发微信公众号:梯阅线条,更多内容参考python知识分享或软件测试开发目录。 |
|