文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 编程基础 | 第五章-类 | 5.2、属性成员

2023-10-26 15:21

关注

一、属性成员

属性成员是指类中定义的变量,即属性,根据定义位置,又可以分为类属性实例属性,下面分别进行介绍。

1、实例属性

实例属性是指定义在类的方法中的属性,该属性属于当前实例,例如:定义一个Dog类,在该类的__init__()方法中定义2个实例属性,代码如下:

class Dog:    "实现一个小狗类"    def __init__(self, name, age) -> None:        self.name = name        self.age = age        def sit(self):        "小狗接收到蹲下指令"        print(f"{self.name} is now sitting")my_dog = Dog("jack", 10)my_dog.sit()

可以使用.来访问对象的属性,但是,实例属性只能通过实例名访问,不能通过类名访问,如果使用类名访问会报错

2、类属性

类属性是指在定义类中,并且在函数体外的属性,类属性可以在类的所有实例之间共享,例如:定义一个雁类,在该类中定义3个类属性,代码如下:

class Geese:    """大雁类"""    beak_1 = "喙,比较尖"   # 定义类属性(喙)    wing_1 = "翅膀,比较大"     claw_1 = "爪,行走自如"    def __init__(self):        print("我是大雁类!我有一下特征:")        print(Geese.beak_1)   # 访问类属性        print(Geese.wing_1)        print(Geese.claw_1)my_geese = Geese()

通过类名.的方式访问类属性

3、内置类属性

Python有一些内置的类属性,记录类相关的信息,如下:

属性功能
__dict__类的属性(包含一个字典,由类的数据属性组成)
__doc__类的文档字符串
__name__类名
__module__类定义所在的模块
__bases__类的所有父类构成的元素

示例:

class Dog:    "实现一个小狗类"    def __init__(self, name, age) -> None:        self.name = name        self.age = age        def sit(self):        "小狗接收到蹲下指令"        print(f"{self.name} is now sitting")print (f"Dog.__doc__:{Dog.__doc__}")print (f"Dog.__name__:{Dog.__name__}")print (f"Dog.__module__:{Dog.__module__}")print (f"Dog.__dict__:{Dog.__dict__}")print (f"Dog.__bases__:{Dog.__bases__}")

4、动态调整属性 – 反射

在代码运行之前,类/实例的属性名和值都是不知道的。要在代码的运行过程当中,才知道要给类/对象、添加/删除/修改额外的属性。类的属性和方法,此处统一称为atrribute(属性),动态处理属性的方法有下面这些,如下:

示例:

class Person:    def __init__(self, name):        self.name = name        self._private_money = 2000        self.__secrect = "秘密"    def eat(self, food):        print(f"喜欢吃什么?{food}")    def sleep(self):        print("睡觉中.....")# 类属性if hasattr(Person, "hello"):    print(Person.hello)else:    setattr(Person, "hello", "hello,class")print(Person.hello)# 实例属性f = Person("base")ss = Person("sss")if hasattr(f,"sex"):    print(f.sex)else:    setattr(f, "sex", "女")print(f.sex)    # 输出结果:女# print(ss.sex) # 编译报错:'Person' object has no attribute 'sex'# 删除f对象的name属性之后,再次访问f的name属性delattr(f, "name")# print(f.name) # 编译报错:'Person' object has no attribute 'name'print(ss.name)# 判断对象有没有某个方法f = Person("base")print(f.__dict__)if hasattr(f, "sleep"):    f.sleep()

来源地址:https://blog.csdn.net/cloud323/article/details/133691527

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯