首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在python中记录类之间的通用方法

在Python中,可以使用元类(metaclass)来记录类之间的通用方法。元类是用于创建类的类,它允许我们在定义类时自定义类的行为。

在Python中,所有的类都是type类的实例,而type类本身就是一个元类。因此,我们可以通过定义一个继承自type的元类来实现记录类之间通用方法的功能。

下面是一个示例代码,展示了如何使用元类来记录类之间的通用方法:

代码语言:txt
复制
class CommonMethodsMeta(type):
    def __new__(cls, name, bases, attrs):
        # 获取所有基类的方法
        common_methods = set()
        for base in bases:
            common_methods.update(dir(base))

        # 获取当前类的方法
        current_methods = set(attrs.keys())

        # 计算当前类特有的方法
        unique_methods = current_methods - common_methods

        # 打印当前类特有的方法
        print(f"类 {name} 特有的方法:{unique_methods}")

        # 创建类
        return super().__new__(cls, name, bases, attrs)


class MyClassA:
    def method_a(self):
        pass


class MyClassB:
    def method_b(self):
        pass


class MyClassC(MyClassA, MyClassB, metaclass=CommonMethodsMeta):
    def method_c(self):
        pass


# 输出结果:
# 类 MyClassC 特有的方法:{'method_c'}

在上面的代码中,我们定义了一个元类CommonMethodsMeta,它继承自type类。在元类的__new__方法中,我们通过比较基类和当前类的方法,找出当前类特有的方法,并打印出来。

然后,我们定义了三个类MyClassAMyClassBMyClassC,其中MyClassC继承自MyClassAMyClassB。在MyClassC中,我们定义了一个特有的方法method_c

当我们创建MyClassC类的实例时,元类CommonMethodsMeta__new__方法会被调用,打印出MyClassC特有的方法method_c

这样,我们就通过元类成功记录了类之间的通用方法。

推荐的腾讯云相关产品和产品介绍链接地址:

以上是腾讯云提供的一些相关产品,可以根据具体需求选择适合的产品来支持云计算和开发工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python记录_day17 之间

一、依赖关系 a对象是b方法参数 这种关系是我用着你,但你不属于我,比如公司和临时工关系,是很弱一种关系 1 class Zhiwu: 2 def __init__(self,name...b一个属性 这种关系是我用着你,你也属于我 一对一关系: class Boy: def __init__(self,name,girlFriend= None): self.name...32 t.add(s1) 33 t.add(s3) 34 t.add(s4) 35 t.display() 36 37 结果: 38 张三 39 王五 40 麻子 一对多 聚合关系:属于关联关系一种特例...侧重点是xxx和xxx聚合成xxx,各有各生命周期。比如电脑,电脑里有CPU、硬盘、内存等,电脑挂了,CPU还是好,还是完整个体。 组合关系:也属于关联关系一种特例。...三、特殊方法 1、  () 时自动执行__init__ , 进行初始化 2、  对象()时自动执行__call__   ,表示调用 3、 对象[key]   自动执行  __getitem__ 4

35130
  • python 方法

    讲述构造函数时候特别提到,init()是一个函数,只不过中有一点特殊作用罢了,每个,首先要运行它,它规定了基本结构。...数据流转过程 除了可以写这种函数之外,还可以写别的函数,延续上一个例子: #!...hiekay”是一个具体数据,通过构造函数name参数,传给实例属性self.name,Person另外一个方法author参数列表第一个就是self,表示要承接self对象,return...调用不同实例时,self会自动进行匹配,当然,匹配过程是python完成,仍然不用我们操心。...对author方法增加了一个参数address,当调用这个方法时候:hiekay.author(“China”),要对这个参数赋值,,这个方法显示是有两个参数(self,address),但是调用时候

    1.4K10

    python静态方法方法

    知识回顾: 上一节,我们深化学习了属性监控,主要使用了三个魔法方法: __getattr__ __setattr__ __delattr__ 与此同时书写属性设置监控时候,千万不要忘记写__...设置属性 4.通过查看属性值,来看属性监控是否成功 二、静态方法 方法名称前加一个头标记@staticmethod。...静态方法往往用于一些自定义来实现一些通用功能,可以方便我们调用方法静态方法,不需要self这类参数,因为静态方法,不需要进行实例化,就可以进行调用。...三、方法 方法名称前加一个头标记@classmethod。 方法调用也不需要进行实例化。 方法python构造方法一个补充。...name="test方法" print(name) 调用: Person.setName() 静态方法方法区别主要是方法定义时候头标记不同。

    3.1K20

    python 之间关系

    之间关系     我们世界事物和事物之间总会有一些联系.     面向对象. 之间也可以产生相关关系 1. 依赖关系         执行某个动作时候....此时关系是最轻.        ...老师1") t2 = Teacher("老师2") t3 = Teacher("老师3") s.zhaopin(t1) s.zhaopin(t2) s.zhaopin(t3) s..shangke() 关系...类型是根据调用方对象来进行变换     super:表示是父 特殊成员:     __init__() # 创建对象时候初始化操作     __call__() # 对象()     __getitem...len() 调用时行为     __iter__() 定义当迭代容器元素行为     __repr__(self) 定义当被 repr() 调用时行为     __str__(self) 定义当被

    63110

    Python静态方法方法及实例方法

    概述 Python,有着类属性、实例属性,静态方法方法、实例方法区别。到底有什么不一样呢?接下来我们就一探究竟。...其实,实例对象也是间接通过对象进行访问每一个实例对象中都有一个 __class__ 属性,其指向就是创建实例对象对象。stu1.__class__ 指向就是 Student对象。...对象派生实例对象 由上图可以看出: 类属性在内存只保存一份 实例属性每个对象中都要保存一份 还是以上面的例子 ipython 对类属性修改进行测验 In [24]: class Student...实例方法:由对象调用,至少一个 self 参数;执行实例方法时,自动将调用该方法对象赋值给 self。 方法:由调用,至少一个 cls 参数;执行方法时,自动将调用该方法赋值给 cls。... ipython 测验一下各方法 # 实例对象调用 In [71]: f = Foo('hui') In [72]: f.instance_func() hui Foo 实例方法 In [73]

    3K10

    Python静态方法方法及实例方法

    概述 Python,有着类属性、实例属性,静态方法方法、实例方法区别。到底有什么不一样呢?接下来我们就一探究竟。...其实,实例对象也是间接通过对象进行访问每一个实例对象中都有一个 __class__ 属性,其指向就是创建实例对象对象。stu1.__class__ 指向就是 Student对象。...存储方式如下图 [对象派生实例对象] 由上图可以看出: 类属性在内存只保存一份 实例属性每个对象中都要保存一份 还是以上面的例子 ipython 对类属性修改进行测验 In [24]: class...实例方法:由对象调用,至少一个 self 参数;执行实例方法时,自动将调用该方法对象赋值给 self。 方法:由调用,至少一个 cls 参数;执行方法时,自动将调用该方法赋值给 cls。... ipython 测验一下各方法 # 实例对象调用 In [71]: f = Foo('hui') In [72]: f.instance_func() hui Foo 实例方法 In [73]

    2.9K00

    python静态方法方法

    静态方法方法python2.2被引用,经典和新式都可以使用。同时,一对内建函数:staticmethod和classmethod被引入,用来转化某一方法为这两种方法之一。...静态方法: 静态方法函数,不需要实例。静态方法主要是用来存放逻辑性代码,主要是一些逻辑属于,但是和本身没有交互,即在静态方法,不会涉及到方法和属性操作。...可以理解为将静态方法存在此类名称空间中。事实上,python引入静态方法之前,通常是全局名称空间中创建函数。 例子: 譬如,我想定义一个关于时间操作,其中有一个获得当前时间函数。...函数可以通过名以及实例两种方法调用! 注意: python2 ,必须总要把一个方法声明为静态,从而能够不带一个实例而调用它。...python3 ,如果方法只通过调用,而不需要通过实例调用的话,不用非要声明为静态。 #!

    1.5K30

    Python动态创建方法

    0x00 前言 Python也是作为一种对象存在,因此可以在运行时动态创建,这也是Python灵活性一种体现。 本文介绍了如何使用type动态创建,以及相关一些使用方法与技巧。...0x01 本质 何为是对现实生活中一具有共同特征事物抽象,它描述了所创建对象共同属性和方法常见编译型语言(如C++)在编译时候就已经确定了,运行时是无法动态创建。...__class__) Python2执行结果如下: Python3执行结果如下: ...输出结果如下: AAAAA Python3,metaclass定义方法做了修改,变成了: class IntTypeBase...0x04 重写__new__方法 每个继承自object都有__new__方法,这是个实例化时优先调用方法,时机早于__init__。它返回类型决定了最终创建出来对象类型。

    5.2K60

    Python动态创建方法

    0x00 前言 Python也是作为一种对象存在,因此可以在运行时动态创建,这也是Python灵活性一种体现。 本文介绍了如何使用type动态创建,以及相关一些使用方法与技巧。...0x01 本质 何为是对现实生活中一具有共同特征事物抽象,它描述了所创建对象共同属性和方法常见编译型语言(如C++)在编译时候就已经确定了,运行时是无法动态创建。...__class__) Python2执行结果如下: Python3执行结果如下: ..._5'> AAAAA Python3,metaclass定义方法做了修改,变成了: class IntTypeBase(object, metaclass=MetaClass): pass...0x04 重写__new__方法 每个继承自object都有__new__方法,这是个实例化时优先调用方法,时机早于__init__。它返回类型决定了最终创建出来对象类型。

    3.5K30

    Python几个常用方法

    最重要是,我们没有专门调用__init__方法,只是创建一个新实例时候,把参数包括圆括号内跟在名后面,从而传递给__init__方法。这是这种方法重要之处。...现在,我们能够我们方法中使用self.name域。这在sayHi方法得到了验证。...__new__(): __new__()__init__()之前被调用,用于生成实例对象.利用这个方法和类属性特性可以实现设计模式单例模式.单例模式是指创建唯一对象吗,单例模式设计只能实例化一个对象....假设水果店销售多钟水果,可以通过__getitem__()方法获取水果店没种水果 代码例子: #!...,输出结果为:Fruit   print fruit         #直接输出对象fruit,返回__str__()方法值,输出结果为:Fruit __call__(): 实现__call

    46820

    Python属性、方法及内置方法

    1.属性 成员变量 对象创建 创建对象过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同对象, 对象属性和方法,与成员变量和成员函数对应,...__classname__attribute方式访问, 内置属性--由系统定义时候默认添加由前后双下划线构成,如__dic__,__module__ #!...方法为: 公有方法 私有方法 方法 静态方法 公有方法中和外都都测调用方法....私有方法:不测被外部调用模块,方法前加个“__”c双下划线就是私有方法。...内部类: 所谓内部类,就是内部定义,主要目的是为了更好抽象现实世界。

    3.3K20

    Python静态方法、实例方法方法区别

    实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例属性和方法(也可以传属性和方法); 调用:只能由实例对象调用。...方法 定义:使用装饰器@classmethod。第一个参数必须是当前对象,该参数名一般约定为“cls”,通过它来传递属性和方法(不能传实例属性和方法); 调用:实例对象和对象都可以调用。...静态方法 定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法不能使用或实例任何属性和方法; 调用:实例对象和对象都可以调用。...def shou_tool_count(cls): print("工具对象数量{}".format(cls.count)) # 定义一个静态方法,初始没有任何参数...,逻辑上方法一般由自身调用,其实实例对象和对象都可以调用 Tool.shou_tool_count() # 调用实例方法,只能由实例对象调用 tool.action() # 调用静态方法,实例对象和对象均可调用

    1.5K20

    实例方法,方法和静态方法区别_python所有实例方法

    只能由实例调用 方法 使用装饰器@classmethod,第一个参数可以是”cls”,也可以是”self”,通过它传递属性和方法。...可以由和实例调用 假设我有一个学生和一个班级,想要实现功能为:班级含有方法:执行班级人数增加操作、获得班级总人数,学生继承自班级,每实例化一个学生,班级人数都能增加。...最后,我想定义一些学生,然后获得班级总人数 这个问题用方法做比较合适,因为我实例化时学生,但是如果我从学生这一个实例获得班级总人数是不合理,同时,如果想要获得班级总人数,如果生成一个班级实例也是没有必要...静态方法主要用来存放逻辑性代码,逻辑上属于,但是和本身没有交互,也就是说静态方法,不会涉及到属性和方法操作。...我们可以外面写一个简单方法来做这些,但是这样做就扩散了代码关系到定义外面,这样写就会导致以后代码维护困难 参考文章 《python静态方法方法》 《python方法,实例方法

    2K40

    Python空间问题以及之间关系

    : self.sex = sex 外部添加(外部通过万能点进行属性添加) class A: def __init__(self,name): self.name...__dict__) 内部添加(引用内部方法内部添加属性) class A: def __init__(self,name): self.name = name...__dict__) 总结:对象属性不仅可以init里面添加,还可以其他方法或者外面添加。...__dict__) 总结:属性不仅可以内部添加,还可以外部添加 对象如何找到属性 对象空间 产生这个对象空间,并有一个对象指针 执行 init 方法,给对象封装属性 对象查找属性顺序...之间关系 存在以下关系: 依赖关系 关联关系 组合关系 聚合关系 实现关系 继承关系(三大特性之一:继承。)

    76910
    领券