类的定义
Python 类的定义
类是一个抽象的概念,我们可以把它理解为具有相同属性和方法的一组对象的集合,而实例则是一个具体的对象。这里以动物(Animal)类为例,
class Animal(object):
pass
其中,
>>> animal = Animal() # 创建一个实例对象
>>> animal
<__main__.Animal at 0x1030a44d0>
类是具有相同属性和方法的一组对象的集合,实例是一个个具体的对象。方法是与实例绑定的函数。获取对象信息可使用下面方法:
type(obj)
:来获取对象的相应类型;isinstance(obj, type)
:判断对象是否为指定的type 类型的实例;hasattr(obj, attr)
:判断对象是否具有指定属性/ 方法;getattr(obj, attr[, default])
获取属性/ 方法的值, 要是没有对应的属性则返回default 值(前提是设置了default ) ,否则会抛出AttributeError 异常;setattr(obj, attr, value)
:设定该属性/ 方法的值,类似于obj.attr=value ;dir(obj)
:可以获取相应对象的所有属性和方法名的列表:
获取对象信息
当我们拿到一个对象时,我们往往会考察它的类型和方法等,比如:
>>> a = 123
>>> type(a)
int
>>> b = '123'
>>> type(b)
str
当我们拿到一个类的对象时,我们用什么去考察它呢?回到前面的例子:
class Animal(object):
def __init__(self, name):
self.name = name
def greet(self):
print 'Hello, I am %s.' % self.name
- 第
1 招:使用type
使用 type(obj)
来获取对象的相应类型:
>>> dog1 = Animal('dog1')
>>> type(dog1)
__main__.Animal
- 第
2 招:使用isinstance
使用 isinstance(obj, type)
判断对象是否为指定的
>>> isinstance(dog1, Animal)
True
- 第
3 招:使用hasattr/getattr/setattr
- 使用
hasattr(obj, attr)
判断对象是否具有指定属性/ 方法; - 使用
getattr(obj, attr[, default])
获取属性/ 方法的值, 要是没有对应的属性则返回default 值(前提是设置了default ) ,否则会抛出AttributeError 异常; - 使用
setattr(obj, attr, value)
设定该属性/ 方法的值,类似于obj.attr=value ;
- 使用
看下面例子:
>>> hasattr(dog1, 'name')
True
>>> hasattr(dog1, 'x')
False
>>> hasattr(dog1, 'greet')
True
>>> getattr(dog1, 'name')
'dog1'
>>> getattr(dog1, 'greet')
<bound method Animal.greet of <__main__.Animal object at 0x10c3564d0>>
>>> getattr(dog1, 'x')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-241-42f5b7da1012> in <module>()
----> 1 getattr(dog1, 'x')
AttributeError: 'Animal' object has no attribute 'x'
>>> getattr(dog1, 'x', 'xvalue')
'xvalue'
>>> setattr(dog1, 'age', 12)
>>> dog1.age
12
- 第
4 招:使用dir
使用 dir(obj)
可以获取相应对象的所有属性和方法名的列表:
>>> dir(dog1)
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'age',
'greet',
'name']