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

成都网站整站优化wordpress仿论坛

成都网站整站优化,wordpress仿论坛,专业网站开发哪家公司好,怎么自己做网站的优化上一篇介绍了 Python 枚举类型的标准库#xff0c;除了考虑到其实用性#xff0c;还有一个重要的原因是其实现过程是一个非常好的学习、理解 Python 类与元类的例子。因此接下来两篇就以此为例#xff0c;深入挖掘 Python 中类与元类背后的机制。翻开任何一本 Python 教程除了考虑到其实用性还有一个重要的原因是其实现过程是一个非常好的学习、理解 Python 类与元类的例子。因此接下来两篇就以此为例深入挖掘 Python 中类与元类背后的机制。翻开任何一本 Python 教程你一定可以在某个位置看到下面这两句话Python 中一切皆为对象(Everything in Python is an object);Python 是一种面向对象编程(Object Oriented Programming, OOP)的语言。虽然在上面两句话的语境中对象(Object)的含义可能稍有不同但可以肯定的是对象在 Python 中具有非常重要的意义也是我们接下来将要讨论的所有内容的基础。那么对象到底是什么?对象(Object)对象是 Python 中对数据的一种抽象Python 程序中所有数据都是通过对象或对象之间的关系来表示的。[ref: Data Model]港台将 Object 翻译为“物件”可以将其看作是一个盛有数据的盒子只不过除了纯粹的数据之外还有其它有用的属性信息在 Python 中所有的对象都具有id、type、value三个属性---------------| || Python Object || |--------------| ID | |---------------| Type | |---------------| Value| |---------------其中 id 代表内存地址可以通过内置函数 id()查看而type表示对象的类别不同的类别意味着该对象拥有的属性和方法等可以通过 type()方法查看def who(obj):print(id(obj), type(obj))who(1)who(None)who(who)451508836845148123444542646064对象作为 Python 中的基本单位可以被创建、命名或删除。Python 中一般不需要手动删除对象其垃圾回收机制会自动处理不再使用的对象当然如果需要也可以使用 del 语句删除某个变量;所谓命名则是指给对象贴上一个名字标签方便使用也就是声明或赋值变量;接下来我们重点来看如何创建一个对象。对于一些 Python 内置类型的对象通常可以使用特定的语法生成例如数字直接使用阿拉伯数字字面量字符串使用引号 列表使用 []字典使用 {} 函数使用 def 语法等这些对象的类型都是 Python 内置的那我们能不能创建其它类型的对象呢?类与实例既然说 Python 是面向对象编程语言也就允许用户自己创建对象通常使用 class 语句与其它对象不同的是class 定义的对象(称之为类)可以用于产生新的对象(称之为实例)class A:passa A()who(A)who(a)1404777039446164542635424上面的例子中 A 是我们创建的一个新的类而通过调用 A() 可以获得一个 A 类型的实例对象我们将其赋值为 a也就是说我们成功创建了一个与所有内置对象类型不同的对象 a它的类型为 __main__.A!至此我们可以将 Python 中一切的对象分为两种可以用来生成新对象的类包括内置的 int、str 以及自己定义的 A 等;由类生成的实例对象包括内置类型的数字、字符串以及自己定义的类型为 __main__.A 的 a。单纯从概念上理解这两种对象没有任何问题但是这里要讨论的是在实践中不得不考虑的一些细节性问题需要一些方便的机制来实现面向对象编程中的继承、重载等特性;需要一些固定的流程让我们可以在生成实例化对象的过程中执行一些特定的操作;这两个问题主要关于类的一些特殊的操作也就是这一篇后面的主要内容。如果再回顾一下开头提到的两句话你可能会想到既然类本身也是对象那它们又是怎样生成的?这就是后一篇将主要讨论的问题用于生成类对象的类即元类(Metaclass)。super, mro()0x00Python 之禅中提到的最后一条命名空间(namespace)是个绝妙的理念类或对象在 Python 中就承担了一部分命名空间的作用。比如说某些特定的方法或属性只有特定类型的对象才有不同类型对象的属性和方法尽管名字可能相同但由于隶属不同的命名空间其值可能完全不同。在实现类的继承与重载等特性时同样需要考虑命名空间的问题以枚举类型的实现为例我们需要保证枚举对象的属性名称不能有重复因此我们需要继承内置的 dict 类class _EnumDict(dict):def __init__(self):dict.__init__(self)self._member_names []def keys(self):keys dict.keys(self)return list(filter(lambda k: k.isupper(), keys))ed _EnumDict()ed[RED] 1ed[red] 2print(ed, ed.keys()){RED: 1, red: 2} [RED]在上面的例子中 _EnumDict 重载同时调用了父类 dict的一些方法上面的写法在语法上是没有错误的但是如果我们要改变 _EnumDict 的父类不再是继承自 dict则必须手动修改所有方法中 dict.method(self) 的调用形式这样就不是一个好的实践方案了。为了解决这一问题Python 提供了一个内置函数 super()print(super.__doc__)super() - same as super(__class__, )super(type) - unbound super objectsuper(type, obj) - bound super object; requires isinstance(obj, type)super(type, type2) - bound super object; requires issubclass(type2, type)Typical use to call a cooperative superclass method:class C(B):def meth(self, arg):super().meth(arg)This works for class methods too:class C(B):classmethoddef cmeth(cls, arg):super().cmeth(arg)我最初只是把 super() 当做指向父类对象的指针但实际上它可以提供更多功能给定一个对象及其子类(这里对象要求至少是类对象而子类可以是实例对象)从该对象父类的命名空间开始搜索对应的方法。以下面的代码为例class A(object):def method(self):who(self)print(A.method)class B(A):def method(self):who(self)print(B.method)class C(B):def method(self):who(self)print(C.method)class D(C):def __init__(self):super().method()super(__class__, self).method()super(C, self).method() # calling Cs parents methodsuper(B, self).method() # calling Bs parents methodsuper(B, C()).method() # calling Bs parents method with instance of Cd D()print(\nInstance of D:)who(d)4542787992C.method4542787992C.method4542787992B.method4542787992A.method4542788048A.methodInstance of D:4542787992当然我们也可以在外部使用 super() 方法只是不能再用缺省参数的形式因为在外部的命名空间中不再存在 __class__和 selfsuper(D, d).method() # calling Ds parents method with instance d4542787992C.method上面的例子可以用下图来描述----------| A |----------| method() ---------- ||---------- ----------| B | | D |---------- super(C,self) ----------| method() ---------- ----------|---------- || C | |---------- | super(D,self)| method() ----------可以认为 super()方法通过向父类方向回溯给我们找到了变量搜寻的起点但是这个回溯的顺序是如何确定的呢?上面的例子中继承关系是 object-A-B-C-D 的顺序如果是比较复杂的继承关系呢?class A(object):passclass B(A):def method(self):print(Bs method)class C(A):def method(self):print(Cs method)class D(B, C):def __init__(self):super().method()class E(C, B):def __init__(self):super().method()d D()e E()Bs methodCs methodPython 中提供了一个类方法mro()可以指定搜寻的顺序mro 是Method Resolution Order的缩写它是类方法而不是实例方法可以通过重载 mro() 方法改变继承中的方法解析顺序但这需要在元类中完成在这里只看一下其结果D.mro()[__main__.D, __main__.B, __main__.C, __main__.A, object]E.mro()[__main__.E, __main__.C, __main__.B, __main__.A, object]super() 方法就是沿着 mro() 给出的顺序向上寻找起点的super(D, d).method()super(E, e).method()Bs methodCs methodsuper(C, e).method()super(B, d).method()Bs methodCs method
http://www.zqtcl.cn/news/517113/

相关文章:

  • 公司网站被抄袭网络宣传
  • 企业网站设计收费专业网络推广公司排名
  • 视频网站模板源码深圳网站建设明细报价表
  • nike官方网站定制二级域名网站有哪些
  • 越秀移动网站建设房门户网站如何做优化
  • 什么软件可以做动漫视频网站开发一个小程序大概要多少钱
  • 微网站可以做成域名访问株洲网站做的好的公司
  • 建设网站去工信部备案需要什么资料网站建设相关博客
  • 十度网站建设网站建立的企业
  • 婚庆公司网站国外网站阻止国内访问怎么做
  • 乐山高端网站建设wordpress openload
  • 哪些网站上可以做租车深圳品牌网站开发
  • 乐清网站改版公司西安网站建设公司哪家好
  • 国外小型网站1688货源网下载
  • 浏览量最大的网站网站导航栏目设计内容依据
  • 户外拓展公司网站开发桂林网站开发
  • 怎么入侵网站后台互联网营销师含金量
  • 网站建设ningqueseo济南网站建设服务
  • 做网站给女朋友品牌网站建设只询大蝌蚪
  • 厦门服装商城网站建设米课做网站
  • ui做网站实例一起做网店网站官方
  • 网站建设合同怎么写wordpress如何设置404页面
  • wordpress 安装过程顺德网站优化
  • 大麦网网站建设的功能定位wordpress图片不被收录
  • 做推广任务的网站渠道营销推广方案
  • 消防中队网站建设施工企业项目经理部管理人员对外行为的法律后果
  • 淘宝的网站建设情况仪器网站模板
  • 网站开发需要掌握的知识什么软件是做网站模板的
  • wap网站管理系统wordpress评论分页不显示不出来
  • 泗阳住房建设局网站泉州网站建设工程