这是我的类(class):
class node:
node.maxNum = 10000
node.maxCoord = 10000.0
def __init__(self, num = 0, **coordsIn):
if num > node.maxNum: raise nodeNumException
self.num = num
##set default args##
coordsDefault = {'X' : float('NaN'), 'Y' : float('NaN')}
##set coordinates to input##
self.coords = coordsIn
@property.setter
def coords(self, **Coords):
for Key in Coords:
if Coords[Key] > maxCoord: raise nodeCoordException
##Set _coords to default, then update from coordsIn##
self._coords = coordsDefault.update(Coords)
@property
def coords(self):
return self._coords
创建实例时,产生如下错误:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
File "C:\Projects\CANDE\mesh.py", line 7, in __init__
if num > node.maxNum: raise nodeNumException
NameError: name 'maxNum' is not defined
我已经尝试通过几种不同的方式访问类中的 maxNum
和 maxCoord
变量,但我似乎无法弄清楚如何避免此错误。
有没有办法修复我的代码并保持相同的方法?
另外:有没有更好的方法来做到这一点?任何建议,将不胜感激。这是我的第一个主要 Python 项目。
最佳答案
类变量在声明/定义时不需要类限定符。访问时只需要限定符
class node:
maxNum = 10000
maxCoord = 10000.0
def __init__(self, num = 0, **coordsIn):
if num > node.maxNum: raise nodeNumException
self.num = num
........
你的代码有更多问题
- 定义setter时,需要一个属性对象。
- setter 应该始终跟在 getter 之后,否则你会得到一个 NameError。
关于python - 从类内部访问包含的静态信息的更好/正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516251/