1.1 空类
python类主体没有任何内容,只有pass语句,称为空类。
1.2 obj.attr属性赋值
通过obj.attr=value进行类和实例属性赋值。
NO | 场景 | 描述 |
---|---|---|
1 | 类添加属性 | (1) 类添加属性,用于记录数据。(2) 实例没属性,实例取类属性。 |
2 | 实例修改属性 | (1) 实例修改类不可变属性,相互间不影响。(2) 实例修改类可变属性,指向同一值,相互影响。 |
3 | 实例新增属性 | (1) 实例新增属性,只属于本实例。(2) 实例新增属性,用于记录数据,一个实例相当于一条记录。 |
综上,
类添加属性,用于各个实例共享,通常添加实例共有属性,非个性化属性。
实例添加属性,用于记录不同属性。
文件
E:\\documents\\F盘\\testclass.py
class Record:pass
if __name__ == '__main__':
# 添加类属性(数据属性)
Record.name = '梯阅线条'
Record.age = '18'
print('Record.姓名:{},年龄:{}'.format(Record.name,Record.age))
# 实例共享类属性
r1 = Record()
r2 = Record()
print('r1.姓名:{},年龄:{}'.format(r1.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.姓名:{},年龄:{}'.format(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))
except 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.name,r2.age,r2.sex))
示例
# 打开cmd,执行下面示例
E:\\documents\\F盘>python testclass.py
Record.姓名:梯阅线条,年龄:18
r1.姓名:梯阅线条,年龄:18
r2.姓名:梯阅线条,年龄:18
Record.姓名:梯阅线条,年龄:18
r1.姓名:r1.name,年龄:r1.age
r2.姓名:r2.name,年龄:r2.age
Record.姓名:Record.name,年龄:Record.age,性别:Record.sex.=>type object 'Record' has no attribute 'sex'
r1.姓名:r1.name,年龄:r1.age,性别:男
r2.姓名:r2.name,年龄:r2.age,性别:女
1.3 类属性-dict,class,bases
NO | 属性 | 描述 |
---|---|---|
1 | **dict ** | 类和实例的属性字典。 实例无本身属性则为空。 |
2 | **class ** | 查看实例所属类。 |
3 | **bases ** | 查看指定类名的直接超类元组。 实例对象没有bases属性。 |
文件
E:\\documents\\F盘\\testclass.py
class Record:pass
class MyRecordA(Record):
pass
class MyRecordB(MyRecordA):
pass
class MyRecordC(MyRecordB,MyRecordA):
pass
if __name__ == '__main__':
Record.name = '梯阅线条'
Record.age = '18'
r1 = Record()
r2 = Record()
r1.name = 'r1.name'
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.__dict__.keys())))
# r2 空实例,属性字典为空
print('r2.__dict__.keys()={}'.format(list(r2.__dict__.keys())))
# __class__ 查看实例所属类
print('Record.__class__={}'.format(Record.__class__))
print('r1.__class__={}'.format(r1.__class__))
# __bases__ 查看指定类名的直接超类元组
print('Record.__bases__={}'.format(Record.__bases__))
print('MyRecordA.__bases__={}'.format(MyRecordA.__bases__))
# MyRecordB 的 直接超类为 MyRecordA,不包括 Record
print('MyRecordB.__bases__={}'.format(MyRecordB.__bases__))
print('MyRecordC.__bases__={}'.format(MyRecordC.__bases__))
try:
print('r1.__bases__={}'.format(r1.__bases__))
except Exception as e:
# 实例对象没有 __bases__ 属性
print('r1.__bases__={}'.format(e))
示例
# 打开cmd,执行下面示例
E:\\documents\\F盘>python testclass.py
Record.__dict__.keys()=['__module__', '__dict__', '__weakref__', '__doc__', 'name', 'age']
r1.__dict__.keys()=['name', 'age', 'sex']
r2.__dict__.keys()=[]
Record.__class__=<class 'type'>
r1.__class__=<class '__main__.Record'>
Record.__bases__=(<class 'object'>,)
MyRecordA.__bases__=(<class '__main__.Record'>,)
MyRecordB.__bases__=(<class '__main__.MyRecordA'>,)
MyRecordC.__bases__=(<class '__main__.MyRecordB'>, <class '__main__.MyRecordA'>)
r1.__bases__='Record' object has no attribute '__bases__'
1.4 类外定义方法
可以在class外定义方法,然后给类或实例调用。
文件
E**: \\documents\\F盘\\testclass .**py
class 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'
# 普通函数使用
printRecord(Record)
printRecord(r1)
printRecord(r2)
# 赋值给类进行使用
Record.printRec = printRecord
Record.printRec(Record)
r1.printRec()
r2.printRec()
示例
# 打开cmd,执行下面示例
E:\\documents\\F盘>python testclass.py
self.姓名:梯阅线条,年龄:18
self.姓名:r1.name,年龄:r1.age
self.姓名:梯阅线条,年龄:18
self.姓名:梯阅线条,年龄:18
self.姓名:r1.name,年龄:r1.age
self.姓名:梯阅线条,年龄:18
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Value
+关注
关注
0文章
10浏览量
8646 -
python
+关注
关注
56文章
4782浏览量
84452
发布评论请先 登录
相关推荐
python类的多态和类的property属性
property ,其实是 Python 中一个内置的装饰器,它可以在新式类中把一个函数 改造 成属性。当你读取属性值时,会进入被 property 装饰的函数。当你对
发表于 03-09 16:38
python类的多态和类的property属性
python类的多态 多态,是指在同一类型下的不同形态。 比如下面这段代码 class People: def speak(self): passclass American(People
SystemVerilog中的类的赋值
当我们声明一个类时还没有分配内存,只有在实例化(new())时才会分配内存。这个时候对象句柄指向被分配的内存,下面是对象句柄赋值的示例。
简述python类实例及构造函数基础
个入参。
方法可以通过实例(比如,I2.w())或类(C3.w(I2))进行调用。
通过实例调用时,第一个入参通常为self,python会自动传入。
Python类的属性和方法是什么
编程中我们用类来创建对象。日常生活中的汽车设计图就是我们Python中的类。日常生活中的小汽车就是Python中的对象。
Python中的类和对象详解
Python 是一种面向对象的编程语言,它支持类和对象。类是一种用户自定义的数据类型,用于定义对象的属性和方法。对象是类的
python循环创建变量并赋值
循环是Python编程中非常重要的一个概念,它可以让我们轻松地重复执行某些代码块,从而简化编程过程并提高代码的效率。在循环中,我们经常需要创建变量并赋值,这是非常常见的操作。接下来,我将详尽地解释在
proteus属性赋值工具怎么用
Proteus是一种电路设计和仿真软件,在进行电路设计和仿真时,属性赋值是非常重要的步骤。属性赋值工具可以帮助用户快速有效地配置电路元件的属性
mapgis如何给区属性赋值
MapGIS是一款功能强大的地理信息系统软件,它提供了丰富的功能和工具,使用户能够对地理数据进行快速、高效的管理和分析。其中一个重要的功能就是给区属性赋值,即对地图中的区域进行分类和标记,以便更好
评论