python获取对象信息

本文介绍了如何在Python中获取对象的类型和属性。通过`type()`函数可以获取变量的类型,而`dir()`方法则能列出变量的所有属性。对于自定义对象,`dir()`会返回所有实例属性,包括特殊方法。`getattr()`和`setattr()`用于安全地获取和设置对象属性,当属性不存在时,`getattr()`允许提供一个默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除了name和gender外,可以提供任意额外的关键字参数,并绑定到实例,

class Person(object):
    def __init__(self, name, gender, **kwargs):
        self.name = name
        self.gender = gender
        for k, v in kwargs.items():
            setattr(self, k, v)
xiaoming = Person('xiaoming', 'M', age = 18, course = 'Python')
print(xiaoming.name, xiaoming.gender, xiaoming.age, xiaoming.course)

通过type()函数,可以获得变量的类型。

n = 1
s = 'this is a string'
type(n) # ==> <class 'int'>
type(s) # ==> <class 'str'>
class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score

p = Person('Alice', 'Female')
s = Student('Bob', 'Male', 100)
type(p) # ==> <class '__main__.Person'>
type(s) # ==> <class '__main__.Student'>

通过dir()方法,可以获取变量的所有属性:

n = 1
dir(n)
[‘abs’, ‘add’, ‘and’, ‘bool’, ‘ceil’, ‘class’, ‘delattr’, ‘dir’, ‘divmod’, ‘doc’, ‘eq’, ‘float’, …]

s = ‘this is a string’
dir(s)
[‘add’, ‘class’, ‘contains’, ‘delattr’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘getnewargs’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘mod’, ‘mul’, ‘ne’, ‘new’, …]
在dir列出的属性中,有很多是以下划线开头和结尾的,这些都是特殊的方法,称为内建方法,在后面,我们还会学习这些方法。
而对于自定义对象:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def who(self):
        return 'I am a Person, my name is {}'.format(self.name)

p = Person('Alice', 'Female')
dir(p)
[‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘gender’, ‘name’, ‘who’]

对于实例变量,dir()返回所有实例属性,包括__class__这类有特殊意义的属性。注意到方法who也是p的一个属性。
dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了。

​>>> getattr(p, ‘name’) # 获取name属性
‘Alice’

setattr(p, ‘name’, ‘Adam’) # 设置新的name属性
s.name
‘Adam’

getattr(s, ‘age’) # 获取age属性,但是属性不存在,报错:
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘Person’ object has no attribute ‘age’

getattr(s, ‘age’, 20) # 获取age属性,如果属性不存在,就返回默认值20:
20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值