类相关函数(反射机制)

类相关函数(反射机制)

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:BaiduNetdiskWorkspaceFrbPythonFilesstudy面向对象属性.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”>

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 类相关函数(反射机制)