【发布时间】: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)
基本上我希望dimension
和proj_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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NameError:未在类本身内部定义的类的名称 – python - Python技术站