1. 创建一个基本的类
class Foo(object):
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs):
data = object.__new__(cls)
return data
2. 根据类创建对象
- 执行类的new方法,创建对象〔空对象)。【构造方法】
- 执行类的init方法,初始化对象
2.1 问题:类是由谁创建的?
2.2 类的创建
class Foo(object):
v1 = 123
def func(self):
return 666
print(Foo) # <class '_main_.Foo" >m" "
# 非传统方式〔一行)#1.创建类型
# -类名#-继承类#-成员def do ( self ):
Fa = type("Foo", (object,), {"v1 ": 123, "func": lambda self: 666})
# 2.根据类创建对象
obj = Fa()
print(Fa) # <class '_main_.Foo" >
2.3 type(元类)创建类
class MyType(type):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __new__(cls, *args, **kwargs):
# 创建类
new_cls = super().__new__(cls, *args, **kwargs)
return new_cls
def __call__(self, *args, **kwargs):
# 1.调用自己那个类的__new__方法去创建对象
empty_object = self.__new__(self)
# 2.调用你自己那个类__init__放发去初始化
self.__init__(empty_object, *args, **kwargs)
return empty_object
# 假设Foo是一个对象,
# 由MyType创建。#Foo类其实是MyType的一个对象。
# #Foo() --> MyType对象()
class Foo(object, metaclass=MyType):
def __init__(self, name):
self.name = name
def __call__(self, *args, **kwargs):
print("自己")
v1 = Foo('XX') # type._call__
v1()