在Python中的多个类之间共享类属性

Zeycus

我有一个包含类属性的类。我需要一组其他类将它们作为类属性共享,这样,如果其中任何一个修改了这些属性,就对所有它们都进行了修改。我天真地使用继承对其进行了尝试,但是它并不是那样工作的:每个类的行为就像是对这些类属性拥有自己的“副本”一样。

档案:

# baseClass.py 
class BaseClass(object):
    iden = 0


# child1.py 
from baseClass import BaseClass

class Child1(BaseClass):
    @classmethod
    def getId(cls):
        return cls.iden


# child2.py
from baseClass import BaseClass

class Child2(BaseClass):
    @classmethod
    def getId(cls):
        return cls.iden

我用来测试的文件是:

from child1 import Child1
from child2 import Child2

print(Child1.getId()) 
Child1.iden = 5
print(Child1.getId())
print(Child2.getId())

我看到的输出:

0
5
0

我应该如何做才能让Child1,Child2和BaseClass共享iden class属性?

杰米·科伯恩(Jamie Cockburn)

您可以通过将iden属性添加到的元类来实现BaseClass

class BaseType(type):
    _iden = 0
    def _get_iden(cls):
        return BaseType._iden
    def _set_iden(cls, value):
        BaseType._iden = value
    iden = property(_get_iden, _set_iden)

class BaseClass(object):
    __metaclass__ = BaseType

class Child1(BaseClass):
    pass

class Child2(BaseClass):
    pass

print Child1.iden
Child1.iden = 5
print Child1.iden
print Child2.iden

输出:

0
5
5

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Python 中创建类之间的共享类属性

来自分类Dev

在python中的多个进程之间共享类变量

来自分类Dev

Python:类与嵌套类之间的属性共享

来自分类Dev

Python类中的类属性阴影

来自分类Dev

Python类中的类属性阴影

来自分类Dev

在对象/类属性之间共享变量

来自分类Dev

多个类属性和具有多个类的单个类列表之间有什么区别?

来自分类Dev

如何在多个C#类之间共享属性

来自分类Dev

如何在多个C#类之间共享属性

来自分类Dev

自己的类中的类属性

来自分类Dev

如何从 Python 中的类中访问类属性

来自分类Dev

在Python中调用类属性

来自分类Dev

Python 2.7类属性奇怪的行为

来自分类Dev

Python的“类属性”和“类函数”

来自分类Dev

Python 2.7类属性的异常行为

来自分类Dev

Python:类本身的静态类属性

来自分类Dev

在父类中获取子类属性

来自分类Dev

类属性中的CSS多个值

来自分类Dev

难以理解类中的私有属性和Python 3中的类属性方法

来自分类Dev

Python中的类属性,实例属性和实例方法之间的区别

来自分类Dev

在多个React组件之间共享JavaScript类

来自分类Dev

在多个类之间共享AVL树

来自分类Dev

在 Python 中的多个进程之间共享存储对象的字典

来自分类Dev

在Kotlin类之间共享通用属性

来自分类Dev

选择多个类属性值以“ xx”开头的类

来自分类Dev

基类中受保护的静态属性是否是在派生类之间共享数据的良好实践?

来自分类Dev

Python-自动更新继承的类中的基类属性(别名)

来自分类Dev

在Python中,如何从类方法的返回值初始化类属性?

来自分类Dev

Python 中类方法的长参数列表:本地、参数还是类属性?

Related 相关文章

热门标签

归档