【问题标题】:NameError: name of the class not defined inside the class itself - pythonNameError:未在类本身内部定义的类的名称 - python
【发布时间】:2023-04-05 07:58:01
【问题描述】:

我有以下代码:

import numpy as np

class ClassProperty(property):
    def __get__(self, cls, owner):
        return self.fget.__get__(None, owner)()

def coord(cls, c):
    if cls.dimension <= 2:
        return c
    else:
        return c + [0]*(cls.dimension-2)

class Basis_NonI(object):

    @ClassProperty
    @classmethod
    def zerocoord(cls):
        return coord(cls, [0,0])   
        
    def __init__(self, dimension):
        pass

class Basis_D(Basis_NonI):
    dimension = 2
    proj_matrix = np.array([Basis_D.zerocoord, Basis_D.zerocoord])
    def __init__(self, dimension):
        super(Basis_D, self).__init__(Basis_D.dimension)

基本上我希望dimensionproj_matrix成为Basis_D 的类属性。

当我运行它时,出现以下错误:

proj_matrix = np.array([Basis_D.zerocoord, Basis_D.zerocoord])

NameError:名称“Basis_D”未定义

--

我不明白的是我可以在init中使用Basis_D.dimension,那么为什么在我使用它来定义proj_matrix时它不能识别名称Basis_D

【问题讨论】:

  • 我不认为Basis_D 是在运行proj_matrix = np.array([Basis_D.zerocoord, Basis_D.zerocoord]) 行时定义的。既然zerocoord是继承类的成员,为什么不用Basis_NonI.zerocoord呢?
  • 因为Basis_NonI 没有属性dimension。你怎么知道Basis_D 是什么时候定义的?
  • 它是在整个class语句执行完之后定义的。

标签:
python
class
methods
attributes