类的定义

Python 类的定义

类是一个抽象的概念,我们可以把它理解为具有相同属性和方法的一组对象的集合,而实例则是一个具体的对象。这里以动物(Animal)类为例,Python 提供关键字 class 来声明一个类:

class Animal(object):
    pass

其中,Animal 是类名,通常类名的首字母采用大写(如果有多个单词,则每个单词的首字母大写),后面紧跟着 (object),表示该类是从哪个类继承而来的,所有类最终都会继承自 object 类。类定义好了,接下来我们就可以创建实例了:

>>> 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) 判断对象是否为指定的 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']
上一页
下一页