python类中的特殊函数__call__和__getattr__

一个类中如果定义了一个函数__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

猜你喜欢

转载自blog.csdn.net/hsc_1/article/details/80704700