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

如何分析对手网站关键词站长工具alexa排名

如何分析对手网站关键词,站长工具alexa排名,公众号登录入口在哪,wamp 多网站6. 元类 Python 中一切皆对象&#xff0c;对象是由类实例化产生的。那么类应该也有个类去产生它&#xff0c;利用 type() 函数我们可以去查看&#xff1a; class A:pass a1 A() print(type(a1)) print(type(A))<class __main__.A> <class type>由上可知&#xf…

6. 元类

Python 中一切皆对象,对象是由类实例化产生的。那么类应该也有个类去产生它,利用 type() 函数我们可以去查看:

class A:pass
a1 = A()
print(type(a1))
print(type(A))
<class '__main__.A'>
<class 'type'>

由上可知,a1 是类 A 的对象,而 A 是 type 类产生的对象。
当我们使用 class 关键字的时候,Python 解释器在加载 class 关键字的时候会自动创建一个对象(但是这个对象非类实例产生的对象)。

6.1 什么是元类

元类是类的类,也就是类的模板。用于控制创建类,正如类是创建对象的模板一样。

在 Python 中,type 是一个内建的元类,它可以用来控制生成类。Python 中任何由 class 关键字定义的类都 type 类实例化的对象。

6.2 定义类的两种方法

使用 class 关键字定义:

class Foo:pass

使用 type() 函数定义:

type() 函数有三个参数:第一个为类名(str 格式),第二个为继承的父类(tuple),第三个为属性(dict)。

x = 2
def __init__(self, name, age):self.name = nameself.age = agedef test(self):print('Hello %s' % self.name)Bar = type('Bar', (object,), {'x': 1, '__init__': __init__, 'test': test, 'test1': test1})  # 类属性、函数属性
print(Bar)
print(Bar.__dict__)b1 = Bar('rose', 18)
b1.test()
<class '__main__.Bar'>
{'x': 1, '__init__': <function __init__ at 0x00000000055A6048>, 'test': <function test at 0x00000000055A60D0>, 'test1': <function test1 at 0x0000000005596BF8>, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Bar' objects>, '__weakref__': <attribute '__weakref__' of 'Bar' objects>, '__doc__': None}
Hello rose

6.3 __init__ 与 __new__

构造方法包括创建对象和初始化对象,分为两步执行:先执行 __new__,再执行 __init__

  • __new__:在创建对象之前调用,它的任务是创建对象并返回该实例,因此它必须要有返回值,是一个静态方法。
  • __init__:在创建对象完成后被调用,其功能是设置对象属性的一些属性值。

也就是 __new__创建的对象,传给 __init__ 作为第一个参数(即 self)。

class Foo:def __init__(self):print('__init__方法')print(self)def __new__(cls,*args, **kwargs):print('__new__方法')print(cls, args, kwargs)ret = object.__new__(cls,*args, **kwargs)   # 创建实例对象print(ret)return ret
f1 = Foo()
__new__方法
<class '__main__.Foo'> () {}		# Foo 类本身
<__main__.Foo object at 0x00000000055AFF28>		# 类的实例对象
__init__方法
<__main__.Foo object at 0x00000000055AFF28>

总结

  • __new__ 至少要有一个参数 cls,代表要实例化的类,由解释器自动提供。必须要有返回值,可以返回父类出来的实例,或直接 object 出来的实例。
  • __init__ 的第一个参数 self 就是 __new__ 的返回值。

6.4 自定义元类

如果一个类没有指定元类,那么它的元类就是 type,也可以自己自定义一个元类。

class MyType(type):def __init__(self, a, b, c):    # self:Bar   a:Bar  b:() 父类  c:属性字典print(self)   print('元类 init 执行~')def __call__(self, *args, **kwargs):print('call 方法执行~')obj = object.__new__(self)     # Bar 产生实例对象,即 b1print(obj)self.__init__(obj, *args, **kwargs)  # Bar.__init__(b1, name)return objclass Bar(metaclass=MyType): # Bar = MyType('Bar', (object,), {}) 触发 MyType 的 __init__() def __init__(self, name):   # self:f1self.name = nameb1 = Bar('rose')   # Bar 也是对象,对象加括号,触发 __call__()
print(b1.__dict__)
<class '__main__.Bar'>
元类 init 执行~
call 方法执行~
<__main__.Bar object at 0x00000000055D3F28>
{'name': 'rose'}

加载完程序后,首先执行 metaclass=MyType,它相当于 Bar = MyType('Bar', (object,), {}),它会执行 MyType 的 __init__ 执行。

再接着执行 b1=Bar('rose) ,因为 Bar 也是对象,对象加括号就会触发 __call__() 方法,再由 __new__() 方法产生实例对象,最后返回。

总结

  • 元类是类的模板,其功能是产生类对象,那么就可以模拟通过 __new__() 产生一个类的对象,并返回。
  • 一切皆对象,那么类也是个对象,它是由 type 产生。
http://www.yayakq.cn/news/286305/

相关文章:

  • 该网站为悬挂备案号医疗网站建设目录
  • 比特币交易网站开发品牌商城网站项目
  • 个人网站可以做淘客网站改版 方案
  • 相册网站源码php模板下载免费
  • 企业网站建设费用 珠海星子网招聘
  • 深圳专业做网站和seo的公司网络科技网站建设
  • 网站建设跟前端有什么区别wordpress博客收录查询
  • 做教育的网站有哪些内容吗企业网站建设方案投标书
  • 学网站建设需要什么软件ps网站设计概述
  • 网站开发项目需求门面商铺装修
  • 医院网站加快建设方案网站建设的广告投入
  • 彩票网站开发教程系统优化的方法知识点
  • 无为教育网站西宁网站制作公司
  • 做网站要买什么空间做企业网站的人才
  • pageadmin建站系统可信网站 收费
  • 镇江网站建站福州免费企业建站
  • 万网是什么网站最有创意促销活动方案
  • 建站时网站地图怎么做洛阳住房和城乡建设部网站
  • 西安网站制作中心网站在线留言如何做
  • 做网站平台需要多少钱文创产品设计心得体会
  • 宜昌市住房和城乡建设厅官方网站济南想做网站
  • 安徽网新科技网站建设介绍什么是网站建设公司
  • 佛山网站建设seo优化嵌入式项目外包平台
  • 如何让百度快照找到自己的网站关键词歌词任然
  • 兰州百姓网免费发布信息网站如何做一份企业网站规划
  • 报关做业务可以上哪些网站html超链接
  • 网站开发文档总结wordpress获取图片原图
  • wordpress建立php站点地图手游开发
  • 网站建设关键词没有文章更新的网站怎么做优化
  • 网站备案 取名资讯通不过做题网站中计算多项式的值怎么做