python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...

首先介绍几个概念:

1、#所谓的静态方法就是这个方法任何类都可以调用,程序一加载就存在的方法

2、所谓的类方法就是这个类一加载就存在的方法,不用实例化这个类就已经存在的方法

3、所谓的元类就是创建类的类

元类: type

我们知道对象是通过构造函数来初始化的,name对象到底是谁创建的呢。其实我们再之前就接触过元类。例如我们创建整形类用int,创建字符串类用str,那么我们创建对象类使用什么来创建的。这里我们就提到了type这个元类。

type是创建类的元类,就像认识形态领域的元认知是对认知的认知。

举例:

@staticmethod

def run():

print("runing.......")

def eat(self,food):

print("eat......."+food)

@classmethod

def smile(cls):

print("smile.........")

def createObvject():

p1 = type("Person", (), {"name": "hongbiao", "age": 25, "run": run,"eat": eat,"smile":smile})

return p1

if __name__ == '__main__':

per = createObvject()

per.smile()

person = per()

print(person.name)

print(person.age)

print(hasattr(per, "name"))

person.run()

person.eat("hhh")

person.smile()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

打印结果

smile.........

hongbiao

25

True

runing.......

eat.......hhh

smile.........

从上面我们可以得到type这个就是元类,通过这个原来来创建对象, createObvject里面封装了type,返回一个对象,注意是返回一个对象而不是实例对象。per()表示实例化一个对象。

分析type这个方法:

源码如下:

def __init__(cls, what, bases=None, dict=None): # known special case of type.__init__

"""

type(object_or_name, bases, dict)

type(object) -> the object's type

type(name, bases, dict) -> a new type

# (copied from class doc)

"""

pass

1

2

3

4

5

6

7

8

type接收三个参数,分别是对象名称,继承内容也就是一般类后面的括号,第三个参数是一个字典类型,用来存贮属性。

这里的属性分为一般属性,静态属性,和类属性

静态属性需要使用装饰器staticmethod修饰,而类属性需要用classmethod来修饰

python动态添加方法

python 作为一门动态的语言,可以在代码执行的过程中来添加方法

def run(self):

print("running..........")

import types

class Person(object):

def __init__(self, name=None,age=None):

this.name = name

this.age = age

def eat(self):

print("eat...........")

p = Person("hb", 26)

p.eat()#正常

p.run()#报错,因为run并不是Person的方法

# 那么我们想添加进去,怎么弄呢

import types

p.run =  types.MethodType(run,p)

# 执行完上面的代码之后下面再调用这个方法就不会报错了

p.run()

# 打印结果:"running.........."

---------------------

作者:京城最明亮的少年

来源:CSDN

原文:https://blog.csdn.net/jeekmary/article/details/82289125

版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

相关文章

flutter调用api_如何在Flutter(REST API)中进行API调用

flutter调用api在本文中,我们将看一下如何快速进行API调用并使用简单的REST API。 在这里查看我在Flutter上的其他一些帖子: Flutter vs React Native 了解Flutter中的BLoC架构 (强烈建议) 在Flutter中构建ListView&#xff0…

java重载与重写的区别+重写父类equals方法的完美实现

【0】README 0.1) 本文章节【1】和【2】的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html ; 旨在区分重载与重写以及他们的相关概念; 0.2) 本文章节【3】的内容转自 http://blog.csdn.net/pacoson…

checkpoint_通过Main的Checkpoint Restore加快Java启动速度

checkpointJava虚拟机为已编译为字节码 (但不一定是用Java编写)的应用程序提供了托管运行时环境。 与为特定平台静态编译的代码相比,这为应用程序开发人员提供了许多好处,并且通常可以提高性能。 JVM通过垃圾回收器 (G…

泛型数组列表ArrayList

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理清 java 中的 数组列表 ArrayList; 【2】数组列表 ArrayList 2.1)ArrayList: ArrayList 具有自动调节数组容量的功能, 而不需要为此…

大数据聚类分析用于预测_多模态数据中的非负矩阵分解用于分割和标签预测

引用Akata Z, Thurau C, Bauckhage C. Non-negative matrix factorization in multimodality data for segmentation and label prediction[C]. 2011.摘要随着 Internet 上带注释的多媒体数据的可用性不断提高,要求有一种技术可以实现不同类型数据的原则性联合处理。…

程序员 rs编码_为什么声明性编码使您成为更好的程序员

程序员 rs编码在许多情况下,具有功能组成的声明式解决方案提供了优于传统命令式代码的出色代码指标。 阅读本文并了解如何使用具有功能组成的声明性代码成为一名更好的程序员。 在本文中,我们将仔细研究三个问题示例,并研究用于解决这些问题…

对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 自动拆箱(装箱)、printf的参数数量可变 以及 枚举类的详细说明; 0.2) 源代码: https://github.com/pacosonTang/core…

go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态

三次握手置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FINACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接三次握手过程说明:1.由客户端发送…

java序列化深克隆_如何在内存序列化中使用Java深克隆对象

java序列化深克隆在我以前的文章中,我解释了深度克隆和浅层克隆之间的区别 , 以及复制构造函数和防御性复制方法比默认的Java克隆如何更好。 使用复制构造函数和防御性复制方法进行的Java对象克隆当然具有某些优势,但是我们必须显式编写一些…

java反射机制+继承设计技巧

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java反射机制 ;最后还顺带提出了 继承设计的技巧; 【1】反射相关 1)反射定义:能够分析类能力的程序称为反射; 2&…

60秒计时器的仿真电路_基于伏秒平衡的同步整流方案探讨

为了提高电源的效率和功率密度,尤其是低输出电压的应用场合,同步整流是不可或缺的。图1-1 反激输出二极管损耗比如上图的反激电源如果输出二极管 Vf0.7V,输出电压 Vout3V 则效率不会高于3/(30.7)81%。为了提升效率一般会选用低导通压降的肖特…

利用反射机制创建新类的两种方式及比较

【0】README 0.1) 本文描述源代码均 转自 http://blog.csdn.net/fenglibing/article/details/4531033 , 旨在深入理解 如何利用反射机制创建类实例; 0.2) 转载的源代码,参见 https://github.com/pacosonTang/core-ja…

如何设计高效测试用例_高效的企业测试-单元和用例测试(2/6)

如何设计高效测试用例在本系列的第一部分中,我们看到了有效测试应满足的一些普遍适用的原则和约束。 在这一部分中,我们将仔细研究代码级单元测试和组件或用例测试。 单元测试 单元测试验证单个单元(通常是类)的行为&#xff0c…

php mysql study_PHPstudy升级mysql数据库

首先查看phpstudy的mysql版本:方法一 使用mysql的version函数:mysql> selectversion();方法二 status命令mysql> status;方法三 直接在cmd下输入命令查看mysql -vmysql --help下面开始升级数据库1、备份好自己的数据库2、清空phpstudy…

selenium 等待_Selenium等待:内隐,外显,流利和睡眠

selenium 等待Selenium等待页面加载在Selenium脚本中起着重要的作用。 它们有助于使它们不易剥落,更可靠。 Selenium提供多次等待,以根据某些条件在脚本执行中提供足够的等待或暂停。 从而确保您在使用Selenium执行自动化测试时不会导致脚本失败。 在本教…

java接口概述

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java 接口概念 ; 0.2)接口技术: 这种技术主要用来描述类具有什么功能, 并不给出每个功能的具体实现; 一个类可以实现多…

通过aws部署推荐系统_通过AWS Elastic Beanstalk轻松进行Spring Boot部署

通过aws部署推荐系统朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护。 几乎所有应用程序都依赖于身份验证。 开发人员以及雇用他们的公司都想确认…

图论算法基础

【0】README 0.1)本文总结于 数据结构与算法分析, 旨在复习数据结构中图论算法的基础知识; 【1】图论若干相关定义 1.1)图G定义:一个图G(V,E)由顶点及集V 和 边集E组成&#xff0c…

mysql 表丢失_Mysql数据库备份 部分数据表丢失 Mysql table doesn't exist 解决

问题:直接拷贝data下的数据库数据进行备份,重装升级了数据库,直接复制备份数据到新的数据库data目录下,发现部分数据表不见了。原因分析:以表“Table”为例:如类型是MyISAM, 数据文件则以”Table.frm”,”T…

aws 删除ec2实例_如何在AWS EC2实例上部署Spring Boot应用程序

aws 删除ec2实例你好朋友, 在本教程中,我们将看到如何在AWS EC2实例上部署Spring Boot应用程序。 这是我们将要执行的步骤。 1.使用Spring Boot Initialiser创建一个Spring Boot项目。 2.创建一个休息端点,部署后我们可以访问 3.启动EC2…