python中object是什么类型_Python 的 type 和 object 之间是怎么一种关系?

class,metaclass,instance,subclass,base

以下成立:

对任意的A,A是instance(推论:任意class也是instance)

对任意A,存在B,使得B是A的class

A是class 定义为 从A可以创建B(直接或间接),使得B是A的instance

A是B的metaclass 等价于 B是class,且A是B的class(也就是class的class)

A是metaclass等价于A是class,且从A创建的instance B是class

推论:对任意A是class,存在B使得B是A的metaclass

type的metaclass是type自己

对A和B是class,A是B的base等价于B是A的subclass(这里为了防歧义规定A不是A的subclass,可能与iasubclass不同)

A是B的base,则B不是A的base

A是B的instance当且仅当:B是A的class,或B是A的class的base

object是所有其他class的base(推论:任意A是object的instance,包括object)

推论:没有类是object的base

type是所有其他metaclass的base

推论:object是type的base

type是object的metclass

type是type的class/metaclass

type是type的instance

object是object的instance

type是object的instance

object是type的instance

注意:metaclass的base不一定是metaclass

class与instance,base与subclass只是两种正交的关系,它们通过isinstance相互联系,在Python中并不要求它们有先后顺序

=================================================

我补充一下什么叫做“不要求有先后顺序”,实际上在Python当中自定义类的__bases__,自定义实例的__class__是可以修改的……

>>> class A(object): pass

...

>>> class B(object): pass

...

>>> class C(A): pass

...

>>> c = C()

>>> c.__class__

>>> C.__bases__

(,)

>>> isinstance(c, C)

True

>>> isinstance(c, A)

True

>>> isinstance(c, B)

False

>>> issubclass(C, A)

True

>>> issubclass(C, B)

False

>>> C.__bases__ = (B,)

>>> issubclass(C, A)

False

>>> issubclass(C, B)

True

>>> isinstance(c, A)

False

>>> isinstance(c, B)

True

>>> c.__class__ = A

>>> isinstance(c, C)

False

>>> isinstance(c, B)

False

>>> isinstance(c, A)

True

本质上来说就是一个指向的关系,想怎么改就可以怎么改,只要不违背我上面所说的法则就行。Python里的class和instance就是这样没有节操的东西……

我们下面来造一个A是B的metaclass,B是A的base的例子:

>>> class A(type): pass

...

>>> class B(metaclass=A): pass

...

>>> A.__bases__ = (type, B)

>>> isinstance(B, A)

True

>>> issubclass(A, B)

True

>>> isinstance(B, B)

True

由于Python实现的问题,不是所有的__bases__和__class__都可以随意指定(有一些限制),但大体上可以理解为就是个可以改的指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java8新生代_jdk8.0的jvm详情

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]注意:使用的jdk版本是jdk8.[work16-11-118qf-pms]$ jstat -class 32417Loaded?? Bytes?? Unloaded?? B…

Java中的Runnable、Callable、Future、FutureTask的区别与示例

原文地址:http://blog.csdn.net/bboyfeiyu/article/details/24851847 --------------------------------------------------------- Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念&am…

sql count为空时显示0_C0010负坐标显示为正数+红色0值参考线

小伙伴们早上好啊!今天继续为大家分享柱形图的美化技巧。希望大家认真阅读Excel文件和教程,有的图表看起来简单,实际上在细节处理上用了很多技巧,大家要多多体会。C0010-负坐标显示为正数红色0值参考线效果图图表概述本图可以用来…

配置IISExpress允许外部访问

配置IISExpress允许外部访问 1.找到IISExpress的配置文件&#xff0c;位于 <文档>/IISExpress/config文件夹下&#xff0c;打开applicationhost.config&#xff0c;找到如下代码&#xff1a;<site name"WebSite1" id"1" serverAutoStart"tru…

python布尔测试对象_python布尔类型和逻辑运算

布尔类型 python中True表示真&#xff0c;False表示假&#xff0c;它们是布尔类型&#xff1a;1 2>>> type(True) 在python中&#xff0c;bool的True和False是数值1和0的字符串表示格式&#xff0c;实际上bool类型是int类型的一个子类。1 2>>> bool.__bases_…

mac预装的php路径,Mac使用系统自带php和Apache

最美的语言本文将介绍在Mac环境下如何使用系统本身所带有的Apache(阿帕奇服务器)通过预装的PHP版本来运行PHP的相关代码&#xff0c;相对来讲在OS X系统下相对好配置一些&#xff0c;因为Apache和PHP都预装好了&#xff0c;如果是Windows环境我们需要自己安装ApachePHPMysql(通…

线程池与Callable更配哦

概述 Callable介绍见&#xff1a;http://blog.csdn.net/zengmingen/article/details/53288119 多线程介绍见&#xff1a;http://blog.csdn.net/zengmingen/article/details/53284999 代码 TaskCallable.javapackage multithreading.pool;import java.util.concurrent.Callabl…

IP编址,IP地址介绍与子网划分方法

网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外&#xff0c;还必须理解IP编址以及如何合理地使用IP地址来设计网络。 上层协议类型 以太网帧中的Typ…

3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门

tensorflow基础入门 思考一个问题: 如何刚好学习TensorFlow 类比为一门开发语言&#xff0c;学会语法&#xff0c;api的调用&#xff0c; 原理性掌握。语言的要素: 基础数据类型 运算符 流程 字典 数组 import tensorflow as tf# 常量&#xff0c;指定数据类型 data1 tf.const…

r 函数返回多个值_第四讲 R描述性统计分析

在“R与生物统计专题”中&#xff0c;我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深&#xff0c;层层递进的形式在投必得医学公众号更新。在上一讲中&#xff0c;我们介绍了第三讲 R编程基础-矩阵和数据框 (戳这里即可跳转)。到现在为止&#xff0c;大…

python双线性插值函数_双线性插值法原理 python实现

码字不易&#xff0c;如果此文对你有所帮助&#xff0c;请帮忙点赞&#xff0c;感谢&#xff01;一. 双线性插值法原理&#xff1a;① 何为线性插值&#xff1f;插值就是在两个数之间插入一个数&#xff0c;线性插值原理图如下&#xff1a;在位置 x 进行线性插值&#xff0c;插…

张恩民 php,php100教程_php100张恩民php视频 56课时_网站编程_寂涯网络学习基地

1、PHP基本语法和数据类型&#xff1a;(1)、PHP基本语法&#xff1a;1、htm 和 php 混编2、一个语句以 ; (分号结束)3、如何定义一个变量&#xff0c;和变量的使用(2)、PHP数据运算类型四种标量类型&#xff1a;boolean(布尔型)integer(整型)float(浮点型&#xff0c;也作“do…

Oracle 自带sqldeveloper导入数据到表

步骤 1、建一张字段名和类型与要导入数据一致的表。 2、如果是excel文件&#xff0c;另存为 csv文件。 因为excel文件遇到空格会报错&#xff0c;excel文件太大工具会读取文件失败。 而csv文件是秒级读取&#xff0c;有空格也会导入不会报错。 ------------- 更多的Java&am…

百度腾讯中兴华为全部入局Linux Foundation深度学习基金会

2019独角兽企业重金招聘Python工程师标准>>> 虽然名字叫做Linux Foundation&#xff0c;但是这家基金会关注的领域并不局限在Linux操作系统领域。事实上&#xff0c;Linux Foundation基金会还为很多其他开源基金和项目提供支持&#xff0c;比如Cloud Foundry、Autom…

python判断点在矩形内_判断平面内矩形和圆是否有交点的python实现

#! /usr/bin/env python# -*- coding: utf-8 -*-filename : 平面坐标内矩形与圆是否相交usage :authors : U{peterguo}copyright: tencentdate : 2012.08.21version : 1.0.0.0Modified History:2012.08.21 创建import osimport sysimport reimport urllib2import timeimport da…

python读取mysql数据库_Python操作MySQL数据库9个实用实例

在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候&#xff0c;需要用的安装版本&#xff0c;源码版本容易有错误提示。下边是打包了32与64版本。 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1、取得 MYSQL 的版本 #…

win主机上搭建php网站运行环境,Windows server 2008搭建php运行环境图文详解(php5.3)

这篇文章主要为大家分享下Windows server 2008搭建php运行环境的步骤&#xff0c;需要的朋友可以参考下下载php组件包首先到http://windows.php.net/download/下载你需要的php版本&#xff0c;这里我下载的是php5.3。下面解压php组件 包到磁盘上。安装Microsoft Visual C 2008 …

python 登陆微博 被删除 token_爬取微博信息,使用了cookie仍然无法登录微博

按照网上的模板自己写了类似的代码爬取微博&#xff0c;可是response回来的html是登录界面的html&#xff0c;应该是没有成功登陆微博&#xff0c;但是和网上的代码是基本一样的from bs4 import BeautifulSoupimport pandas as pdimport requestsurl "https://weibo.cn/2…

plsql developer连接oracle--本地不安装oracle

工具 数据库开发程序 PLSQL Developer oracle 客户端 instantclient&#xff0c;点击下载 &#xff08;下载与oracle相同版本或最新版本&#xff0c;如果 PLSQL Developer是32位&#xff0c;则要下载32位的&#xff09;安装 1、解压oracle客户端 到盘某个目录。我的目录是C:\or…

ubuntu networking 与 network-manager

刚遇到的坑&#xff0c;因为操作不当导致网络中断&#xff0c;于是手动配置了/etc/network/interfaces , 修复了系统之后发现ubuntu-desktop中的有线链接不见了&#xff0c;百度了一下说是networking服务和network-manger服务会起冲突。 【Server版本】 在UbuntuServer版本中&…