自己的类中的类属性

舍迪尔

我想有一个类实例作为它自己的类中的类属性。它是组织该类的一组固定实例。我想我前段时间已经在 J​​ava 中做到了这一点。

打电话

c = A()

课外工作完美。

最小代码示例:

class A:
    c = A()
    def __init__(self):
        self.B = 1
    def doSomething(self):
        print(self.B)

但是总是有一个错误:NameError: name 'A' is not defined

----> 2     c = A()
NameError: name 'A' is not defined

是否可以将“c”作为 A 类的实例?然后我会用:

A.c.doSomething()

等等。当然在真正的代码中有更多的例子,比如'c'。

切普纳

这是可能的,但您必须先定义类,然后才能实例化它。

class A:
    def __init__(self):
        self.B = 1

    def doSomething(self):
        print(self.B)

A.c = A()

一个class语句提供了更声明的方式比调用创建类type明确。以上等价于

def A_init(self):
    self.B = 1

def A_doSomething(self):
    print(self.B)

A = type("A", (), {'__init__': A_init, 'doSomething': A_doSomething})
del A_init, A_doSomething

type必须先完成对 的调用,然后才能将 的实例添加Adict作为第三个参数传递给 的type


您可能会发现装饰器使类属性的添加更加“原子”:

def add_instances(*names):
    def _(cls):
        for name in names:
            setattr(cls, name, cls())
        return cls
    return _

@add_instances("c", "d", "e")
class A:
    def __init__(self):
        self.B = 1

    def doSomething(self):
        print(self.B)

将导致A.c, A.d, 和A.eall 指的是 的不同实例A请注意,add_instances除了假设它可以在没有任何参数的情况下实例化之外,不会对其应用的类做出任何假设。


如果您想知道为什么可以通过引用您当前定义的函数来编写递归函数:

def factorial(n):
    return 1 if n == 0 else n*factorial(n-1)

不同之处在于def语句的主体语句本身被评估解析,而不是def被评估。class语句的主体逐个语句评估,以生成dict传递给 的 a type

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

限制类和类属性

来自分类Dev

在创建过程中访问自己的类属性

来自分类Dev

对OnMethodBoundaryAspect中的类属性的引用

来自分类Dev

如何在PHP扩展类中设置静态类属性?

来自分类Dev

在派生类中访问基类属性-在“类范围”中

来自分类Dev

从Swift中的超类访问子类属性

来自分类Dev

类在类属性中引用自身的最佳方法是什么?

来自分类Dev

如何在@Immutable类中设置超类属性?

来自分类Dev

阻止访问自己类中的specifc属性

来自分类Dev

Python类中的类属性阴影

来自分类Dev

Flutter Dart:如何更改“类”列表中的类属性的值

来自分类Dev

在Python中调用类属性

来自分类Dev

测试派生类中是否存在类属性,而不是父类中

来自分类Dev

C#覆盖泛型类中的基类属性

来自分类Dev

通过父类中的函数访问子类属性

来自分类Dev

当派生类中存在新属性时,选择基类属性

来自分类Dev

在创建过程中访问自己的类属性

来自分类Dev

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

来自分类Dev

从Swift中的超类访问子类属性

来自分类Dev

如何从所述类中对类属性调用`property_exists()`?

来自分类Dev

Python类中的类属性阴影

来自分类Dev

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

来自分类Dev

类属性中的属性错误

来自分类Dev

将类属性设置为 VBA 中的类?

来自分类Dev

在父类中获取子类属性

来自分类Dev

访问基(父)类方法中的类属性,可能会被派生(子)类重载

来自分类Dev

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

来自分类Dev

获取类属性中的所有类名

来自分类Dev

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

Related 相关文章

热门标签

归档