类相关函数(反射机制)

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日

相关文章

  • 行走的数字

    一、前言 有一定数学基础的同学们都知道,如果两个正整数相除之后得到的结果,要么能除尽,要么就是一个循环小数。假如结果是循环小数,那么小数的每一位取值是0-9,且存在循环节点。如果我们用小数的每一位进行画图,每位小数用固定的线段表示,而每位小数的大小则用角度(1代表36度,2代表72度,以此类推)表示,这样的话我们就可以看到画图板上有一条线段在行走一样。示例:…

    2023年4月2日
    00
  • 函数的特殊使用方式

    5.4 函数的特殊使用方式 5.4.1 匿名函数 所谓匿名函数,即不再使用def语句这样标准形式定义的函数。Python中可以使用lambda关键字来创建匿名函数。用lambda创建的匿名函数的函数体比def定义的函数体要简单。语法如下: lambda [参数1[,参数2],….参数n]]:表达式 lam_sum = lambda arg1, arg2:…

    Python开发 2023年4月2日
    00
  • 元组(tuple)

    4.5 元组(tuple) 元组这种数据类型和列表非常相似,也是一种序列。和列表的不同之处在于存放到元组内的数据不能直接修改。元组是一种可迭代对象。使用元组可以使程序运行性能提升,因为一般来说,创建元组类型tuple的变量比列表类型list要快,而且占用更小的存储空间。 4.5.1 元组的创建 4.5.1.1 通过逗号创建 >>> tup1…

    Python开发 2023年4月2日
    00
  • Python词频分析

    Python词频分析 一、前言 在日常工作或者生活中,有时候会遇到词频分析的场景。如果是要进行词频分析,那么首先需要对句子进行分词,将句子中的单词进行切割并按照词性进行归类。在Python中有个第三方库叫jieba(结巴),可以对文章或者语句进行分词。不得不佩服这个库的作者,真是个取名鬼才:) 二、分词 2.1 安装库 jieba库github地址jieba…

    2023年4月2日
    00
  • Python变量

    4.10 Python变量 4.10.1 变量介绍 变量,顾名思义,就是可以变化的量。变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python中,变量就是变量,它没有类型,我们所说的类型是变量所指的内存…

    Python开发 2023年4月2日
    00
  • Python代码块及输入输出

    3.7 Python代码块及输入输出 3.7.1 Python代码块 前面分别介绍了关键字、运算符,由运算符和操作数组成了表达式。而语句由关键字、标识符、表达式组成。而代码块由若干条语句组成。通常Python中的代码块是通过缩进来创建的。在很多语言中,都使用一个特殊的单词或字符,比如begin或{来标识代码块的起始位置,并使用另一个特殊的单词或字符,如end…

    Python开发 2023年4月2日
    00
  • 集合(set)

    4.6 集合(set) 集合是由不重复元素组成的无序容器。集合中的元素不能重复,即使向集合中再添加同样的元素,也只会保留一个。由于集合的这种特性,所以一般可以用集合进行去重。集合中不能添加可变对象(不可哈希),因为无法判断两个可变对象是否相同,也就无法保证集合的内部不会有重复元素。集合中的元素是无序的,我们通过print可以显示集合内的元素,但是显示的结果并…

    Python开发 2023年4月2日
    00
  • 可迭代对象

    4.9 可迭代对象 Python中有6种基本的数据类型,除了数字类型,其它5种类型都是可迭代对象。掌握可迭代对象的特性和方法是非常有必要的。 4.9.1 可迭代(iterable)、可迭代对象 4.9.1.1 相关概念 迭代(遍历)就是按照某种顺序逐个访问对象中的每一项。Python中有很多对象都是可以通过for语句来直接遍历的,例如list、string、…

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