[TimLinux] Python 元类
Posted TimLinux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[TimLinux] Python 元类相关的知识,希望对你有一定的参考价值。
1. type函数
name = "This is a string" print(type(name)) # <class ‘str‘> print("*" * 10, "分界线", "*" * 10) cls = type(‘Foo‘, (), {}) f = cls() print(type(f)) # <class ‘__main__.Foo‘> print(type(cls)) # <class ‘type‘> print(cls.__name__) # Foo print("*" * 10, "分界线", "*" * 10) def init(self, name, age): self.name = name self.age = age print(self.name, self.age) cls = type(‘Foo‘, (object, ), {‘__init__‘: init}) f = cls(‘Tim‘, 22) # Tim 22
2. __new__函数
class Foo(object): def __init__(self, name, age): self.name = name self.age = age print(self.name, self.age) def tmp(self): print("call tmp()") def __new__(cls, *args, **kwargs): print("call __new__") obj = object.__new__(cls) print("id(obj)===", id(obj)) return obj f1 = Foo(‘Tim‘, 22) # 这一个操作,等于===下面的两步操作。 print("id(f1)===", id(f1)) f1.tmp() #call __new__ #id(obj)=== 1507711426120 #Tim 22 #id(f1)=== 1507711426120 #call tmp() f2 = Foo.__new__(Foo) print("id(f2)===", id(f2)) f2.__init__(‘Tim‘, 22) f2.tmp() #call __new__ #id(obj)=== 1507711426232 #id(f2)=== 1507711426232 #Tim 22 #call tmp()
3. __init__函数
__init__函数,如果由Foo类能声明对象的时候,调用顺序是,先调用__new__,然后通过使用python提供的object.__new__方法,来创建一个对象,接下来把这个对象返回,然后由这个返回的对象,来调用__init__方法。
Foo.__new__ --> 通过object.__new__生产对象 --> 使用这个对象调用Foo.__init__方法-->完成类的对象声明
4. __metaclass__变量
ttt
以上是关于[TimLinux] Python 元类的主要内容,如果未能解决你的问题,请参考以下文章