获得对象信息
使用 dir()
可以获得一个对象的所有属性与方法,例如:
>>> dir('ABC')
['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
修改内置函数
类似__xxx__
的属性和方法在Python中都是有特殊用途的,比如__len__
方法返回长度。
实际上,在len()
函数内部,它自动去调用该对象的__len__()
方法,所以,下面的代码是等价的:
>>> len('ABC')
3
>>> 'ABC'.__len__()
3
我们可以自定义一个特定的类来演示这一点:
class Test(object):
def __init__(self,name):
self._name=name
def __len__(self):
return len(self._name)+100
def __str__(self):
return 'Test:'+self._name
>>> a=Test('ZhangSan')
>>> len(a)
108
>>> print(a)
Test:ZhangSan
给实例绑定方法
下面展示如何给实例绑定一个方法:
def set_age(self,age):
self.age=age
>>> from types import MethodType
>>> s.set_age=MethodType(set_age,s)
>>> s.set_age(25)
>>> s.age
25
但是该方法对于新的实例还得重新定义一次,如果要给所有实例都绑定该方法,就得给class绑定:
>>> def set_score(self, score):
... self.score = score
...
>>> Student.set_score = set_score
给实例绑定属性
给实例绑定属性是简单的,但有时候我们需要对能绑定的属性进行限制,这需要通过 slots 方法:
class Student(object):
__slots__ = ('name', 'age')