获得对象信息

使用 dir() 可以获得一个对象的所有属性与方法,例如:

  1. >>> dir('ABC')
  2. ['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']

修改内置函数

类似__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。
实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的:

  1. >>> len('ABC')
  2. 3
  3. >>> 'ABC'.__len__()
  4. 3

我们可以自定义一个特定的类来演示这一点:

  1. class Test(object):
  2. def __init__(self,name):
  3. self._name=name
  4. def __len__(self):
  5. return len(self._name)+100
  6. def __str__(self):
  7. return 'Test:'+self._name
  8. >>> a=Test('ZhangSan')
  9. >>> len(a)
  10. 108
  11. >>> print(a)
  12. Test:ZhangSan

给实例绑定方法

下面展示如何给实例绑定一个方法:

  1. def set_age(self,age):
  2. self.age=age
  3. >>> from types import MethodType
  4. >>> s.set_age=MethodType(set_age,s)
  5. >>> s.set_age(25)
  6. >>> s.age
  7. 25

但是该方法对于新的实例还得重新定义一次,如果要给所有实例都绑定该方法,就得给class绑定:

  1. >>> def set_score(self, score):
  2. ... self.score = score
  3. ...
  4. >>> Student.set_score = set_score

给实例绑定属性

给实例绑定属性是简单的,但有时候我们需要对能绑定的属性进行限制,这需要通过 slots 方法:

  1. class Student(object):
  2. __slots__ = ('name', 'age')