使用方法初始化class属性

时间:2015-09-23 10:00:46

标签: python class methods attributes initialization

(最后)编辑:好的,所以我是个笨蛋。我的身份确定是为了让__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

2 个答案:

答案 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)