在python中基于类可以创建对象
# 定义类
class Foo(object):
def __init__(self.name):
self.name = name
def __new__(cls,*args,**kwargs):
data = object.__new__(cls)
return data
# 根据类创建对象,分两步
# 1. 在内部执行new方法,创建一个空对象 {}
# 2. 之后执行类的init方法,初始化对象。{"name":"xiao"}
# 注意“:new方法称为构造方法,init方法称为初始化方法
obj = Foo("xiao")
对像-----------基于类实现的
类 ------------基于啥实现的????
类 默认是有type创建的
def do(self):
pass
# 1.创建类
# 类名。 继承谁 成员
Fun = type("Foo", (object,), {"v1": 123, "func": lambda self: 666, "do": do})
# 2.根据类创建对象
obj = Fun()
# 3.调用对象中v1变量(类变量)
print(obj.v1)
# 4.执行对象的func方法
result = obj.func()
print(result)
元类
# 肯定由type创建
class Foo(object):
pass
# 指定创建类的方法
# 首先先创建一个类,这个类继承type
# metaclass指定类
class Myclass(type):
pass
class Fun(object,metaclass=Myclass):
pass
# Fun类由Myclass创建
例子
class Myclass(type):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __new__(cls, *args, **kwargs):
new_class = super().__new__(cls, *args, **kwargs)
return new_class
def __call__(self, *args, **kwargs):
# 1. 调用自己那个类的 __new__ 方法去创建对象
empty_object = self.__new__(self)
# 2. 调用自己那个类的 __init__ 方法初始化
self.__init__(empty_object, *args, **kwargs)
return empty_object
class Fun(object, metaclass=Myclass):
def __init__(self, name):
self.name = name
# 执行的过程也是先走new在走init
v1 = Fun("xiaoqiang")
print(v1.name)
"""
类加()是执行 __new__ 和 __init__
对象加 ()[现在这段代码是Fun(),代码至上而下,走到class Fun处,创建Fun类,在往下遇见Fun()走Myclass的__call__的方法(也就是说Fun类是Mycls)]
是走的__call__ 的方法 在走__call__的方法时 先走的是__new__,在走__init__
"""