位置: 编程技术 - 正文

Python实例一个类背后发生了什么(python怎么写一个类)

编辑:rootadmin

推荐整理分享Python实例一个类背后发生了什么(python怎么写一个类),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python中一个类怎么调用另一个类的方法,python写一个类,python编写一个类,python怎么写一个类,python写一个类,python一个类调用另一个类,python怎么写类,用python定义一个类,内容如对您有帮助,希望把文章链接给更多的朋友!

首先来看一个例子,正常情况下我们定义并且实例一个类如下

上述代码中,obj 是通过 Foo 类实例化的对象,其实,不仅 obj 是一个对象,Foo类本身也是一个对象,因为在Python中一切事物都是对象。

print type(obj) # 输出: Foo 表示,obj 对象由Foo类创建print type(Foo) # 输出:type表示,Foo类对象由 type 类创建如果按照一切事物都是对象的理论:对象是通过执行Foo类的构造方法创建,那么Foo类对象应该也是通过执行某个类的 构造方法 创建。

一、两个基本的类这里和有必要提到一下在Python中有两个最基本的对象,<type ‘object'> 和 <type ‘type'>,这两个对象是所有对象的起源。

Python实例一个类背后发生了什么(python怎么写一个类)

1、<type ‘type'>的类型是<type ‘type'>(它本身),<type ‘type'>的父类是<type ‘object'>2、<type ‘object'>的类型是<type ‘type'>,<type ‘object'>没有父类在Python对象系统中,<type ‘object'>和<type ‘type'>的关系就像鸡和蛋的关系,不能说谁先于(创建)谁,两者是相互依赖的,共同构成了Python对象系统的基础.有点难理解,不过没有关系,知道有种这么两个东西就好了,比较我们也不是设计Python的人,没有必要搞的那么清楚.

二、类的创建主要有两种方式,不过本质上都是一样的,都是通过type类来实例一个用户类

由上面可以看出来 , Foo类是由type类实例而来,那么具体的创建的过程是怎么样的呢,接着往下面看:

来了解几个概念new 和 __init()和__metaclass__:

__new__函数是实例一个类所要调用的函数,每当我们调用obj = Foo()来实例一个类时,都是先调用__new__() 然后再调用__init__()函数初始化实例. __init__()在__new__()执行后执行, 类中还有一个属性 __metaclass__,其用来表示该类由 谁 来实例化创建,所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看 类 创建的过程。

三、阐述运行过程

1、mytype产生一个叫做Foo的实例,主要的原理就是设置了,__metaclass__=MyTypoe,这样就指定mytype类来实例foo类,如果Python没有找到__metaclass__,它会继续在(父类)中寻找 __metaclass__属性,并尝试做和前面同样的操作。如果Python在任何父类中都找不到__metaclass__,它就会在模块层次中去寻找__metaclass__,并尝试做同样的操作。如果还是找不到__metaclass__,Python就会用内置的type来创建这个类对象。2、mytype类中的__new__方法返回了一个对象,所有的Python实例都是这句代码创建的type.__new__(cls,name,bases,attrs)3、mytype的__init__()函数初始化Foo类,在这里我们可以和在__new__()函数一样设置Foo类的attr属性,比如类中的方法,字段属性等4、和Foo类的创建过程一样,studen类继承了Foo类,所以重复步骤,得到一个studen类5、当用户使用Foo()或者studen()来实例类时,会默认调用类中的_new_()方法,要是之类里面没有这个方法就到父类里面寻找__new__(),我们可以充分利用这个new函数,比如来实现Python中的单例模式,或者对类成员进行批量的修改等等.6、产生了一个实例后马上执行__init__()函数,进行初始化实例,7、由上面的运行结果可以看出,其中Foo和studen类的类型是<class '__main__.MyType'>,这也证明了Foo类和studen类都是由MyType实例而来…而第三个例子,可以看出Foo2类的类型是<type 'type'>,这个并不例外,Foo2继承了object类,(这个,还是跳过吧,前面已经讲过type和object相爱相杀的关系了)总结首先,你知道了类其实是能够创建出类实例的对象。好吧,事实上,类本身也是实例,当然,它们是元类的实例。Python中的一切都是对象,它们要么是类的实例,要么是元类的实例,除了type。type实际上是它自己的元类,在纯Python环境中这可不是你能够做到的,这是通过在实现层面耍一些小手段做到的。其次,元类是很复杂的。对于非常简单的类,你可能不希望通过使用元类来对类做修改。你可以通过其他两种技术来修改类:

1、Monkey patching2、class decora

标签: python怎么写一个类

本文链接地址:https://www.jiuchutong.com/biancheng/382335.html 转载请保留说明!

上一篇:Python中的条件判断语句基础学习教程(python中的条件判断和循环语句)

下一篇:python搭建微信公众平台(python微信公众号开发教程)

  • 哪些情况可免征增值税
  • 金蝶财务软件年末结账步骤
  • 存货盘盈如何处理
  • 季度盈利可以弥补以用以前年度亏损弥补
  • 小规模转一般纳税人生效时间
  • 企业所得税必须计提吗?什么时候计提?
  • 增值税减免所得税填在哪一栏
  • 房地产企业售楼降价法律条文
  • 服务行业成本费用问题与对策
  • 企业所得税季度预缴怎么计算
  • 待认证转进项税额转出会计分录
  • 增值税普通发票和电子普通发票的区别
  • 实收资本印花税是一年一交吗
  • 已经在网上申报学校可以改学校吗
  • 设计服务发票怎么入账
  • 超市购物卡开票可以做账吗
  • 污水处理厂税收风险
  • 其他综合收益影响净利润吗
  • 商业承兑汇票贴现转让
  • 营业外支出增值税率是多少
  • 工程款主营业务成本
  • 广告公司 成本
  • 零售价法会计分录
  • 资产负债表流动性从强到弱
  • 两个公司发工资违法吗
  • linux的进程类型
  • 是否启用税种综合申报
  • 企业不得抵扣进项税
  • win7玩什么游戏流畅
  • php怎么上传图片
  • 什么样的发票可以报销
  • 赊销商品属于什么信用
  • 最高成本的手机是哪款
  • 记账凭证账务处理步骤
  • js怎么把时间戳转为日期yyyy-mm-dd
  • 固定资产进项税额怎么抵扣
  • 长期待摊费用的摊销年限有规定吗?
  • 机器学习分类算法之XGBoost(集成学习算法)
  • 登录界面html5
  • 应交税费应交增值税销项税额
  • 记账凭证后面附发票吗
  • pyqt 菜单
  • python3中rindex用法
  • 企业被吊销后能当被告嘛
  • 抵扣联怎么抵扣使用
  • 价税合计公式计算
  • 国税里货币资金怎么算
  • 理财产品怎么分类总结
  • 银行代发工资必须要本行的卡吗
  • sql server管理员权限
  • 国债利息属于免税吗
  • 营改增后土地出让增值税
  • 差旅费中火车票的进项税怎么计算
  • 收到所得税退税怎么做账务处理
  • 委外研发费用如何入账
  • 商业承兑汇票销售产品会计分录
  • 招待费的增值税怎么算
  • 网络发票管理办法细则
  • 企业取得的土地使用权用于自行开发建造厂房
  • 发票项目名称可以自定义吗
  • MySQL数据库备份
  • win10语言栏没有
  • xp系统电脑设置在哪
  • Internet Explorer 8(IE8)简体中文版de 卸载
  • win10找不到打印机驱动
  • 苹果电脑macbookpro忘记密码
  • SCP 方便的Linux文件互传
  • win7系统怎么禁用开机启动项
  • Unity3D游戏开发毕业论文
  • 正则表达式语法 \d
  • python让用户选择
  • java程序员准备骑驴找马了,需要怎么准备
  • 批处理系统定义
  • python pygame模块详解
  • python cx_Oracle模块的安装和使用详细介绍
  • javascript含义
  • 国家税务总局全国增值税查询
  • 增值税消费税申报比对不符怎么办
  • 递延所得税资产怎么计算
  • 出口报价必须含增值税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设