python获取对象信息

除了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

猜你喜欢

转载自blog.csdn.net/angelsweet/article/details/114583221
今日推荐