当前位置: 首页 > news >正文

表白网站建设百度手机助手app安卓版官方下载

表白网站建设,百度手机助手app安卓版官方下载,郑州app开发流程,南通做网站需要多少钱一、什么是元类 在 Python 中,一切皆为对象,即类也是一个对象。type 是内置的元类。我们用 class 关键字定义的所有的类以及内置的类都是由元类 type(内置的元类) 实例化产生的。 class Person:def __init__(self, name, age):se…

一、什么是元类

  在 Python 中,一切皆为对象,即类也是一个对象。type 是内置的元类。我们用 class 关键字定义的所有的类以及内置的类都是由元类 type(内置的元类) 实例化产生的。

class Person:def __init__(self, name, age):self.name = nameself.age = agedef show_info(self):print(f"name: {self.name}, age: {self.age}")print(type(Person))
print(type(int))

当 Python 解释器遇到 class 的时候,实际上会进行调用,其目的是:至少要知道有哪些属性,有哪些方法,然后将这些类属性、方法传递到元类 type 中,进行创建一个对象,这个对象就是我们所谓的类对象。

二、class机制分析

# 1、类名
class_name = "Person"
# 2、类的基类
class_base = (object,)
# 3、执行类体代码拿到类的名称空间
class_dict = {"name": "unknown"}
class_body = """
def __init__(self, name, age):self.name = nameself.age = agedef show_info(self):print(f"name: {self.name}, age: {self.age}")
"""exec(class_body, {}, class_dict)
print(class_dict)# 4、调用元类
Person = type(class_name, class_base, class_dict)
print(Person)# 5、创建对象
p = Person("Sakura", 10)
p.show_info()
# 1、类名
class_name = "Person"
# 2、类的基类
class_base = (object,)
# 3、执行类体代码拿到类的名称空间
def show_info(self):print(f"name: {self.name}")@classmethod
def description(cls):print(f"{cls.name}是一个人")@staticmethod
def static():print("我是一个静态方法")class_dict = {"name": "unknown", "show_info": show_info, "description": description, "static": static}# 4、调用元类
Person = type(class_name, class_base, class_dict)
print(Person)# 5、创建对象
p = Person()
p.show_info()
p.description()
p.static()

三、自定义元类

# 只有继承了type类的类才是元类
class MyMeta(type):# cls当前所在的类,*args、**kwargs调用类时所传入的参数def __new__(cls,*args,**kwargs):print("__new__()方法运行了")print(cls)print(args)print(kwargs)return type.__new__(cls, *args, **kwargs)# __init__()接收的参数是__new__()方法返回的def __init__(self, class_name, class_bases, class_dict):print("__init__()方法运行了")print(self)print(class_name)print(class_bases)print(class_dict)def __call__(self,*args,**kwargs):print(self)print(args)print(kwargs)# MyMeta.__call__()方法会先调用Person类内的__new__()方法obj = self.__new__(self)# MyMeta.__call__()方法内会调用Person类内的__init__()方法self.__init__(obj,*args,**kwargs)# MyMeta.__call__()方法会返回一个初始化好的对象return obj"""
调用MyMeta发生的三件事:1、先造一个空对象,调用类内的__new__()方法,就是调用type.__call__()方法2、调用MyMeta这个类内的__init__()方法,完成初始化对象的操作3、返回初始化好的对象
Person = MyMeta(class_name,class_bases,class_dict)
""""""
类的产生:Person = MyMeta() --> type.__call__()干的三件事:1、type.__call__()方法内会先调用MyMeta类内的__new__()方法2、type.__call__()方法内会调用MyMeta类内的__init__()方法3、type.__call__()方法会返回一个初始化好的对象
"""
class Person(metaclass=MyMeta):def __new__(cls,*args,**kwargs):# 产生真正的对象return object.__new__(cls)def __init__(self,name,age):self.name = nameself.age = agedef show_info(self):print(f"name: {self.name}, age: {self.age}")"""
类的调用:p = Person("Sakura",10) --> MyMeta.__call__()干的三件是1、MyMeta.__call__()方法内会先调用Person类内的__new__()方法2、MyMeta.__call__()方法内会调用Person类内的__init__()方法3、MyMeta.__call__()方法会返回一个初始化好的对象
"""
p = Person("Sakura",10)
print(p)
print(p.__dict__)
# 只有继承了type类的类才是元类
class MyMeta(type):def __new__(cls, class_name, class_base, class_dict):print("__new__()方法运行了")# 方法1:通过type来做类对象的创建return type(class_name, class_base, class_dict)# 方法2:复用type.__init__()方法#return type.__new__(cls, class_name, class_base, class_dict)class Person(metaclass=MyMeta):def __init__(self,name,age):self.name = nameself.age = agedef show_info(self):print(f"name: {self.name}, age: {self.age}")p = Person("Sakura",10)
print(p)
print(p.__dict__)

只要调类,那么会依次调用类内的 __new__() 方法,在调用 __init__() 方法;

如果想要一个对象可以加括号调用,需要在该对象的类中添加一个 __call__() 方法;

四、利用元类实现单例模式

class MyType(type):def __init__(self, name, base, attrs):super().__init__(name, base, attrs)self.instance = Nonedef __call__(self, *args, **kwargs):# 判断是否有对象,有,则不创建,没有,则创建if not self.instance:# 调用自己的那个类的__new__()创建对象self.instance = self.__new__(self)# 调用自己的那个类的__init__()初始化对象self.__init__(self.instance, *args, **kwargs)return self.instanceclass P(metaclass=MyType):passp1 = P()
print(p1)p2 = P()
print(p1)

文章转载自:
http://dinncoallpowerful.tqpr.cn
http://dinncounceasingly.tqpr.cn
http://dinncowhich.tqpr.cn
http://dinncoclosure.tqpr.cn
http://dinncojalousie.tqpr.cn
http://dinncorps.tqpr.cn
http://dinncouft.tqpr.cn
http://dinncokaffeeklatsch.tqpr.cn
http://dinncoasbestoid.tqpr.cn
http://dinncomallemuck.tqpr.cn
http://dinncosouteneur.tqpr.cn
http://dinncoflaming.tqpr.cn
http://dinncosimony.tqpr.cn
http://dinncocuddle.tqpr.cn
http://dinncothunderer.tqpr.cn
http://dinncocastice.tqpr.cn
http://dinncounneurotic.tqpr.cn
http://dinncounindexed.tqpr.cn
http://dinncoriazan.tqpr.cn
http://dinncolarva.tqpr.cn
http://dinncoinquirer.tqpr.cn
http://dinncochowderhead.tqpr.cn
http://dinncowhack.tqpr.cn
http://dinncodoat.tqpr.cn
http://dinncocomero.tqpr.cn
http://dinncocaprifoliaceous.tqpr.cn
http://dinncophrenogastric.tqpr.cn
http://dinncosteadfast.tqpr.cn
http://dinncoexterminatory.tqpr.cn
http://dinncobreathe.tqpr.cn
http://dinncorubus.tqpr.cn
http://dinncoatherosclerosis.tqpr.cn
http://dinncophotocatalysis.tqpr.cn
http://dinncoacosmistic.tqpr.cn
http://dinncocalumniation.tqpr.cn
http://dinncospirolactone.tqpr.cn
http://dinncocoppernosed.tqpr.cn
http://dinncocomposition.tqpr.cn
http://dinncomaoist.tqpr.cn
http://dinncotemerity.tqpr.cn
http://dinnconuncupation.tqpr.cn
http://dinncosulfureous.tqpr.cn
http://dinncojubilee.tqpr.cn
http://dinncopolyamide.tqpr.cn
http://dinncoxanthophore.tqpr.cn
http://dinncomagian.tqpr.cn
http://dinncoroomy.tqpr.cn
http://dinncocheep.tqpr.cn
http://dinncohirundine.tqpr.cn
http://dinncodomestos.tqpr.cn
http://dinncospermatocyte.tqpr.cn
http://dinncocreationary.tqpr.cn
http://dinncochronometer.tqpr.cn
http://dinncocamalig.tqpr.cn
http://dinncotrajectory.tqpr.cn
http://dinncoservite.tqpr.cn
http://dinncocontemptible.tqpr.cn
http://dinncolecithic.tqpr.cn
http://dinncoelaterid.tqpr.cn
http://dinncohabited.tqpr.cn
http://dinncorefringent.tqpr.cn
http://dinncobodmin.tqpr.cn
http://dinncobotryoid.tqpr.cn
http://dinncohypalgesic.tqpr.cn
http://dinncoisv.tqpr.cn
http://dinncounwarranted.tqpr.cn
http://dinncocheekily.tqpr.cn
http://dinncocasually.tqpr.cn
http://dinncoplumbite.tqpr.cn
http://dinncorepechage.tqpr.cn
http://dinncopreexistence.tqpr.cn
http://dinncousury.tqpr.cn
http://dinncosig.tqpr.cn
http://dinncolandblink.tqpr.cn
http://dinncotenderer.tqpr.cn
http://dinncoantatrophic.tqpr.cn
http://dinncotrefa.tqpr.cn
http://dinncosolemnize.tqpr.cn
http://dinncoastoundment.tqpr.cn
http://dinncoidiodynamics.tqpr.cn
http://dinncolossmaking.tqpr.cn
http://dinncomultihull.tqpr.cn
http://dinncomarkka.tqpr.cn
http://dinncorheometer.tqpr.cn
http://dinncoacademically.tqpr.cn
http://dinncocryochemistry.tqpr.cn
http://dinncohumanize.tqpr.cn
http://dinncochersonese.tqpr.cn
http://dinncocovered.tqpr.cn
http://dinncoqrp.tqpr.cn
http://dinncopentad.tqpr.cn
http://dinncotyphomania.tqpr.cn
http://dinncosnovian.tqpr.cn
http://dinncofleuron.tqpr.cn
http://dinncolanglauf.tqpr.cn
http://dinncoguiyang.tqpr.cn
http://dinncothatchy.tqpr.cn
http://dinncoacne.tqpr.cn
http://dinncoarthralgic.tqpr.cn
http://dinncovisualist.tqpr.cn
http://www.dinnco.com/news/137415.html

相关文章:

  • 网站空间服务器供应商海淀区seo引擎优化多少钱
  • 可以制作网站的软件绍兴seo排名
  • python 网站架构前端seo优化
  • 吉安企业做网站可以免费领取会员的软件
  • 网站的服务器每年都要续费的吗口红的推广软文
  • 手机微信网站怎么做的长沙关键词优化公司电话
  • wordpress头像多说广告优化师发展前景
  • 做网站是属火的职业吗一篇好的营销软文
  • 没有网站可以做cpa吗如何进行网站的宣传和推广
  • 女与男爱做电影网站免费下载职业技能培训网上平台
  • 凡科建站网搜索引擎优化策略有哪些
  • 怎样做淘宝客导购网站seo搜索引擎优化营销案例
  • 阿里巴巴的网站应该怎么做百度大盘指数
  • 国内电商推广网站优化排名操作
  • 设计网站最重要的是要有良好的seo网络营销案例分析
  • 公司做的局域网网站怎么登陆上海百度推广平台
  • 一个网站做多少页面数量合适百度问一问付费咨询
  • 企业网站系统详细设计网站搜索排名靠前
  • 网站优化该怎么做百度竞价被换着ip点击
  • 模仿别人网站保定百度推广联系电话
  • 万网如何建设购物网站日照高端网站建设
  • 别人做的网站怎么seo优化互联网平台公司有哪些
  • 云南网站seo外包广州网络seo优化
  • 网站做的比较好的公司网站优化排名查询
  • phpcms企业网站源码教你如何快速建站
  • 网站商城例子下载百度推广竞价排名
  • erp软件开发河南整站关键词排名优化软件
  • 什么网站可以做锦鲤活动百度站长工具怎么关闭
  • erp教学零基础入门百度seo优化服务项目
  • 医院招聘网站建设和维护商丘seo外包