0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述python空类和实例属性赋值

jf_78858299 来源:梯阅线条 作者:小梯子 2023-02-21 10:30 次阅读

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

    文章

    9

    浏览量

    8479
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83468
收藏 人收藏

    评论

    相关推荐

    如何使用Python? 优势有哪些?

    ,它描述了事务的共性。在搜索类属性时,python首先找到实例,然后在实例中找到属性,当找不到时,它将在
    发表于 07-30 18:08

    Python中的方法、实例方法和静态方法?

    Python实例属性实例方法Python中类属性
    发表于 11-05 06:25

    请问Python中的方法、实例方法和静态方法是什么?

    Python中的方法、实例方法和静态方法
    发表于 11-09 07:13

    python的理解与使用

    python的理解与使用1. 通俗理解(英文名 class),是具有相同特性(属性)和行为(方法)的对象(
    发表于 03-07 16:51

    python静态方法与方法

    python静态方法与方法1. 写法上的差异类的方法可以分为:静态方法:有 staticmethod 装饰的函数方法:有 classmethod 装饰的函数实例方法:没有任何装饰器
    发表于 03-07 16:56

    python私有变量和私有方法

    ,就是一个私有变量。这样的规则在属性上生效,在方法上也同样适用。如果一个实例方法,以双下划线开头,那么这个方法就是一个私有的方法,不能由实例对象或者直接调用。必须得通过
    发表于 03-08 16:30

    python的继承

    )self.grade = grade由于继承的机制,Student 实例会拥有 People 所有属性和方法,比如下边我可以直接调用 People 的 speak 方法。>>&g
    发表于 03-08 16:40

    python的多态和的property属性

    property ,其实是 Python 中一个内置的装饰器,它可以在新式中把一个函数 改造 成属性。当你读取属性值时,会进入被 property 装饰的函数。当你对
    发表于 03-09 16:38

    基于阻塞赋值和非阻塞赋值的多级触发器级联实例

    下面给出一个基于阻塞赋值和非阻塞赋值的多级触发器级联实例,要求将输入数据延迟 3 个时钟周期再输出,并给出对应的 RTL 级结构图和仿真结果。 (1)基于 D触发器的阻塞赋值语句代码如
    的头像 发表于 05-08 14:47 1870次阅读
    基于阻塞<b class='flag-5'>赋值</b>和非阻塞<b class='flag-5'>赋值</b>的多级触发器级联<b class='flag-5'>实例</b>

    简述阻塞赋值和非阻塞赋值的可综合性

    阻塞赋值和非阻塞赋值的可综合性 Blocking Assignment阻塞赋值和NonBlocking Assignment非阻塞赋值,原本是软件进程管理的术语。由于Verilog团队
    的头像 发表于 05-12 09:45 2441次阅读
    <b class='flag-5'>简述</b>阻塞<b class='flag-5'>赋值</b>和非阻塞<b class='flag-5'>赋值</b>的可综合性

    简述python实例及构造函数基础

    假设,I2.w通过属性继承搜索:I2-C1-C2-C3-C3.w,找到C3.w。 那么,I2.w为函数时,表示调用C3.w函数处理I2实例,即I2.w()自动映射为C3.w(I2),实例
    的头像 发表于 02-21 11:23 541次阅读

    python循环创建变量并赋值

    循环是Python编程中非常重要的一个概念,它可以让我们轻松地重复执行某些代码块,从而简化编程过程并提高代码的效率。在循环中,我们经常需要创建变量并赋值,这是非常常见的操作。接下来,我将详尽地解释
    的头像 发表于 11-23 14:51 636次阅读

    python用input赋值多个变量

    Python中,可以使用 input 函数从用户那里获取输入,并将输入赋值给变量。当用户输入多个值时,可以使用空格、逗号或其他分隔符将它们分开。下面将详细介绍如何使用 input 函数赋值多个变量
    的头像 发表于 11-23 15:37 1491次阅读

    proteus属性赋值工具怎么用

    Proteus是一种电路设计和仿真软件,在进行电路设计和仿真时,属性赋值是非常重要的步骤。属性赋值工具可以帮助用户快速有效地配置电路元件的属性
    的头像 发表于 02-23 17:19 1205次阅读

    mapgis如何给区属性赋值

    MapGIS是一款功能强大的地理信息系统软件,它提供了丰富的功能和工具,使用户能够对地理数据进行快速、高效的管理和分析。其中一个重要的功能就是给区属性赋值,即对地图中的区域进行分类和标记,以便更好
    的头像 发表于 02-23 17:49 554次阅读