python进阶四(类的继承)【4-5 python中获取对象信息】
发布时间:2020-12-20 10:24:14 所属栏目:Python 来源:网络整理
导读:python中获取对象信息 拿到一个变量,除了用?isinstance()?判断它是否是某种类型的实例外,还有没有别的方法获取到更多的信息呢? 例如,已有定义: 1 class Person(object): 2 def __init__ (self,name,gender): 3 self.name = name 4 self.gender = gender
python中获取对象信息拿到一个变量,除了用?isinstance()?判断它是否是某种类型的实例外,还有没有别的方法获取到更多的信息呢? 例如,已有定义: 1 class Person(object): 2 def __init__(self,name,gender): 3 self.name = name 4 self.gender = gender 5 6 class Student(Person): 7 def __init__(self,gender,score): 8 super(Student,self).__init__(name,gender) 9 self.score = score 10 def whoAmI(self): 11 return ‘I am a Student,my name is %s‘ % self.name 首先可以用?type()?函数获取变量的类型,它返回一个?Type?对象: 1 >>> type(123) 2 <type ‘int‘> 3 >>> s = Student(‘Bob‘,‘Male‘,88) 4 >>> type(s) 5 <class ‘__main__.Student‘> 其次,可以用?dir()?函数获取变量的所有属性: 1 >>> dir(123) # 整数也有很多属性... 2 [‘__abs__‘,‘__add__‘,‘__and__‘,‘__class__‘,‘__cmp__‘,...] 3 4 >>> dir(s) 5 [‘__class__‘,‘__delattr__‘,‘__dict__‘,‘__doc__‘,‘__format__‘,‘__getattribute__‘,‘__hash__‘,‘__init__‘,‘__module__‘,‘__new__‘,‘__reduce__‘,‘__reduce_ex__‘,‘__repr__‘,‘__setattr__‘,‘__sizeof__‘,‘__str__‘,‘__subclasshook__‘,‘__weakref__‘,‘gender‘,‘name‘,‘score‘,‘whoAmI‘] 对于实例变量,dir()返回所有实例属性,包括`__class__`这类有特殊意义的属性。注意到方法`whoAmI`也是?s?的一个属性。 如何去掉`__xxx__`这类的特殊属性,只保留我们自己定义的属性?回顾一下filter()函数的用法。 dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用?getattr()?和?setattr( )函数了: 1 >>> getattr(s,‘name‘) # 获取name属性 2 ‘Bob‘ 3 4 >>> setattr(s,‘Adam‘) # 设置新的name属性 5 6 >>> s.name 7 ‘Adam‘ 8 9 >>> getattr(s,‘age‘) # 获取age属性,但是属性不存在,报错: 10 Traceback (most recent call last): 11 File "<stdin>",line 1,in <module> 12 AttributeError: ‘Student‘ object has no attribute ‘age‘ 13 14 >>> getattr(s,‘age‘,20) # 获取age属性,如果属性不存在,就返回默认值20: 15 20 任务对于Person类的定义: class Person(object): def __init__(self,gender): self.name = name self.gender = gender 1 class Person(object): 2 3 def __init__(self,**kw):#**kw相当于一个字典,具有键值对,接收n个参数 4 self.name = name 5 self.gender = gender 6 for k,v in kw.iteritems():#遍历迭代字典里面的内容设置事例的属性,经过setattr参数设置后,实例中就匹配上了参数中的关键字的键值对 7 setattr(self,k,v)#等价于self.k=v 8 9 p = Person(‘Bob‘,age=18,course=‘Python‘) 10 print p.age 11 print p.course (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |