类相关函数(反射机制)

6.5 类相关函数(反射机制)

在 Python 中使用反射可以得到对象的属性,即:反过来让对象告诉我们他的相关信息是什么,用于实现在运行时获取对象的相关信息。
Python中有几个内置方法,可以用来检查或是访问对象的属性。这些方法可以用于任意对象。

6.5.1 dir([obj])

描述
不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
示例:
>>> dir(input)
['call', 'class', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'name', 'ne', 'new', 'qualname', 'reduce', 'reduce_ex', 'repr', 'self', 'setattr', 'sizeof', 'str', 'subclasshook', 'text_signature']

6.5.2 hasattr(obj, name)、getattr(obj, name):

描述
这2个函数的实参都是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回 True(获取),否则返回 False(报错)。
示例:

class Person:
    age = 18

    def __init__(self):
        self.name = '张三'


zs = Person()
print(hasattr(zs, 'name'))
print(hasattr(zs, 'age'))
print(hasattr(zs, 'gender'))

print(getattr(zs, 'name'))
print(getattr(zs, 'age'))
print(getattr(zs, 'gender'))

True
True
False
张三
18
Traceback (most recent call last):
File "E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\面向对象\属性.py", line 15, in
print(getattr(zs, 'gender'))
AttributeError: 'Person' object has no attribute 'gender'

6.5.3 setattr(obj, name, val):

描述
本函数与 getattr() 相对应。其参数为一个对象、一个字符串和一个任意值。字符串可以为某现有属性的名称,或为新属性。只要对象允许,函数会将值赋给属性。如 setattr(x, 'foobar', 123) 等价于 x.foobar = 123。
注解:由于私有名称混合发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以便使用 setattr() 来设置它。
示例:

class Person:
    age = 18

    def __init__(self):
        self.name = '张三'
        self.__gender = '男'


zs = Person()

setattr(zs, 'name', '李四')
setattr(zs, '__gender', '女')
print(zs.name)
print(zs._Person__gender)
setattr(zs, '_Person__gender', '女')
print(zs._Person__gender)

李四

6.5.4 delattr(obj, name)

描述
delattr函数实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。
示例

class Person:
    age = 18

    def __init__(self):
        self.name = '张三'
        self.__gender = '男'


zs = Person()

print(hasattr(zs, 'name'))
delattr(zs, 'name')
print(hasattr(zs, 'name'))

True
False

6.5.5 type(obj)

描述
type函数用来返回指定对象的类型。
示例

class Person:

    def __init__(self):
        self.name = '张三'


zs = Person()

print(type(1))
print(type(zs))
print(type(Person))

<class 'int'>
<class 'main.Person'>
<class 'type'>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:类相关函数(反射机制) - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • 字符串(str、bytes)

    4.3 字符串(str、bytes) 4.3.1 字符串前置知识 4.3.1.1 字符串的概念 字符串由一系列字符组成,字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符串是编程语言中表示文本的数据类型。字符串就是由一个个元素(字符)组成的。像这种由一个个元素按照顺序组成的数据,在Python语言里面,把这种特…

    Python开发 2023年4月2日
    00
  • 类和类的定义

    6.2 类和类的定义 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如学生类,而实例是根据类创建出来的一个个具体的对象,每个对象都拥有相同的方法,但各自的数据可能不同。 6.2.1 什么是类 当你在马路上看到一辆飞驰的奥迪汽车时,这辆奥迪车就是汽车类的一个实例。汽车就是一个类,每辆车都是汽车类的一个实例。可以将…

    Python开发 2023年3月31日
    00
  • Python函数的参数

    5.3 函数参数 示例2中定义的函数虽然能够计算总分数,但是每次计算后的结果是固定的,为了增加函数的灵活性,我们希望在调用函数的时候可以传入一些数据,然后根据传入的数据进行计算。要满足这种需求,就需要在定义函数的时候定义参数。 5.3.1 形参和实参 在编程语言中,函数定义使用的是形参,调用时传入的是实参。形参(parameter),全称为形式参数,不是实际…

    Python开发 2023年4月2日
    00
  • Python关键字(保留字)

    3.2 Python关键字(保留字) 保留字又称关键字,不可用于普通标识符。关键字的拼写必须与这里列出的完全一致。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字。>>> import keyword>>> keyword.kwlist [‘False’, ‘None’, ‘True’,…

    Python开发 2023年4月2日
    00
  • 数字(number)

    4.2 数字(number) Python中数字类型有4种: 整型(int) 布尔型(bool) 浮点数(float) 复数(complex) 4.2.1 整型(int) 形如:1、233、-6、69这样的数据都是整型。1、在Python3中只有一种整型int,表示长整型,没有Python2中的long。2、理论上Python3中的int类型可以表示无限大的…

    Python开发 2023年4月2日
    00
  • 包和库

    2.3 包和库 2.3.1 包的概念 包是在模块之上的概念,为了方便管理而将多个脚本文件(模块文件)进行打包。包是一种用点式模块名构造 Python 模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。包其实…

    2023年4月2日
    00
  • JSON

    4.8 JSON 4.8.1 JSON简介 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数…

    Python开发 2023年4月2日
    00
  • 类方法和对象方法

    6.4 类方法和对象方法 方法的本质其实就是函数,在模块中定义就是函数,在类中定义就是类的方法。方法按照归属分类一般有3种:对象方法、类方法、静态方法。 6.4.1 对象方法 class Person: cls_attr = ‘我是类属性’ def __init__(self): self.obj_attr = ‘我是对象属性’ def eat(self):…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部