元类
类也是对象(属于元类的对象)
#打印字符串(字符串是对象)
print("HelloWorld")
#打印类名,类同样为一个对象
print(Person)
使用type可以动态创建类
type(类名,由父类名称组成的元组(可以为空),包含属性的字典(名称和值))
#案例1:使用type创建类 Myclass = type("MyClass3",(),{}) m1 = Myclass() print(type(m1))
#案例2:使用type创建带有属性(方法)的类 def show(self): print("---num---%d"%self.num) # 使用元类(type)创建类 Test = type("Test",(),{"show":show}) t = Test() t.num = 100 t.show()
#案例3:使用type动态创建一个继承指定类的类 class Animal(): def __init__(self,color="Yellow"): self.color = color def eat(self): print("吃死你") Dog = type("Dog",(Animal,),{}) dog = Dog() dog.eat() print(dog.color)
类装饰器
和函数装饰器类似,只不过你在返回func的时候显示对象不能被调用,重写__call__()方法后,对象可以直接进行调用
Test 等价于 test = Test(test) 装饰器特性
Test(test)的这个test就是func
class Test(object): def __init__(self,func): print("--初始化--") print("func name is %s"%func.__name__) self.__func = func # 重写该方法后,对象可以直接进行调用 def __call__(self): print("--装饰器中的功能--") self.__func() # @Test 等价于 test = Test(test) 装饰器特性 @Test def test(): print('--test 函数---') # 本身test指向函数test,但是装饰器将test指向了对象。 # 对象本身不可以被调用,但是重写__call__方法之后则会被调用 test()
注意类装饰器的形式是非主流的形式,以后要加功能就写闭包
当别人写了类装饰器你认得就可以了