这是我的班级:
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项目。
答案 0 :(得分:3)
类变量在声明/定义时不需要类限定符。访问时只需要限定符
class node:
maxNum = 10000
maxCoord = 10000.0
def __init__(self, num = 0, **coordsIn):
if num > node.maxNum: raise nodeNumException
self.num = num
........
您的代码中存在更多问题
答案 1 :(得分:2)
class node:
maxNum = 10000
maxCoord = 10000.0
同时使用要访问的节点将行更改为if Coords[Key] > node.maxCoord: raise nodeCoordException
。
不相关但您应该使用大写的类名:class Node