配色: 字号:
06python空类和实例属性赋值
2023-08-14 | 阅:  转:  |  分享 
  
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知识分享或软件测试开发目录。
献花(0)
+1
(本文系梯阅线条首藏)