一个类中如果定义了一个函数__call__那么该类的实例就可以当成函数来调用
例子如下
class Person(object): def __init__(self,name,gender): self.name=name self.gender=gender def __call__(self,friend): print("My name is %s..."%self.name) print("My friend'name is %s..."%friend) p=Person("Bob",'male') p("hudahai")
输出为
My name is Bob... My friend'name is hudahai...
__getattr__和__slots__
如果一个类中有属性__slots__,那么就不能随便给该类添加__slots__值中以外的属性
下面实例中
class A(object): __slots__ = ('a','b') def __init__(self,a,b): self.a=a self.b=b def mydefault(self): print("default") def __getattr__(self, item): return self.mydefault a=A(1,2) a.hu()#对应的输出是"default" a.c=3#会出现错误,a中不含有属性c