(最后)编辑:好的,所以我是个笨蛋。我的身份确定是为了让__init__
之后的所有方法都在__init__
内。这是一个语法错误。
我想知道我是否可以使用方法(类的成员)初始化变量。基本上,它看起来像这样:
class Tile:
def __init__(self, x, y, tile_type):
self._x = x
self._y = y
self._tile_type = tile_type
self._color = my_method()
(further in class)
def my_method(self):
#my definition
目前,它给了我一个错误:
UnboundLocalError: local variable 'my_method' referenced before assignment
问题在于我声明了一个带有像这样的理解列表的二维数组
[[Tile(i,j,0) for i in range(Y_SIZE)] for j in range(X_SIZE)]
所以我想避免使用第二个嵌套循环将my_method()
的返回值放在类属性_color
中,如果可能的话。
谢谢!
编辑:根据要求,我将更具体:我想将my_method()
返回的值分配给_color
。对于缩进感到抱歉,my_method(self)
实际上是Tile
类。
对于那些真正需要该类完整代码的人:
class Tile:
def __init__(self, x, y, tile_type):
self._x = x
self._y = y
self._tile_type = tile_type
self._color = self.set_color_variation()
def _get_x(self):
return self._x
def _set_x(self, x):
self._x = x
x = property(_get_x, _set_x)
def _get_y(self):
return self._y
def _set_y(self, y):
self._y = y
y = property(_get_y, _set_y)
def _get_color(self):
return self._color
def _set_color(self, color):
self._color = color
color = property(_get_color, _set_color)
def _get_tile_type(self):
return self._tile_type
def _set_tile_type(self,tile_type):
self._tile_type = tile_type
tile_type = property(_get_tile_type, _set_tile_type)
def set_color_variation(self):
_color = make_color(TILE_COLOR[_tile_type], TILE_COLOR_VARIATION[_tile_type])
它目前给我的错误信息:
AttributeError: 'Tile' object has no attribute 'set_color_variation'
如果我写
self._color = set_color_variation()
它给了我:
UnboundLocalError: local variable 'set_color_variation' referenced before assignment
答案 0 :(得分:1)
是的,您可以在构造函数中执行:self._color = self.my_method
。
答案 1 :(得分:0)
你可以试试这个
class Tile:
def __init__(self, x, y, tile_type, method):
self._x = x
self._y = y
self._tile_type = tile_type
self._color = method()
def my_method():
# Write you logic here
obj = Tile(x=1,y=2,tile_type="Type", method=my_method)