如何在Python 3中覆盖默认的类属性值?

时间:2017-02-15 10:54:56

标签: python python-3.x class

Python noob在这里。我正在进行一次" Text Adventure"打字游戏。我目前正在尝试为游戏项目构建一个类,其中包含这些项目的各种默认属性。其中一个属性将是一个布尔值" takeable",表示玩家是否可以使用此项目。我设法完成了这项工作,但前提是我为我创建的每个项目分配TrueFalsetakeable。我已经弄清楚如何默认为takeable=False,但似乎我无法有选择地将takeable=True传递给可以接受的少数项目。"

class Objects():
    """Basic structure of all game objects."""

    def __init__(self, item_name, item_description):
        self.item_name = item_name
        self.item_description = item_description
        self.takeable = False


items = {
    "main_room_table": Objects("Wooden table", "A large wooden table with items scatter atop its surface."),
    "main_room_key": Objects("Small brass key", "A small brass skeleton key. What could it unlock?", takeable=True)

这会导致TypeError: __init__() got an unexpected keyword argument 'takeable'我理解这种情况正在发生,因为当Python不期待另一个参数时,我传递了参数takeable=True

在创建类实例的过程中,有没有办法覆盖这样的默认值?我知道每次创建一个新的"项目时,我只需要传递takeable的布尔值。实例,但似乎有一种方法可以默认为一个值,并且能够在创建类实例时覆盖它。

3 个答案:

答案 0 :(得分:0)

您的__init__不接受takeable - 参数。您可以将其设为可选参数(默认为False,如果没有给出):

def __init__(self, item_name, item_description, takeable=False):
    [...]
    self.takeable = takeable

答案 1 :(得分:0)

您实际上是在描述默认参数:

class Objects():
    """Basic structure of all game objects."""

    def __init__(self, item_name, item_description, takeable=False):
        self.item_name = item_name
        self.item_description = item_description
        self.takeable = takeable

现在您可以选择是否提供takeable作为值,如果不是,则选择值False

答案 2 :(得分:0)

默认值分配给参数,而不是在init定义中。

class Objects():
    """Basic structure of all game objects."""

    def __init__(self, item_name, item_description, takeable=False):
        self.item_name = item_name
        self.item_description = item_description
        self.takeable = takeable


items = {
    "main_room_table": Objects("Wooden table", "A large wooden table with items scatter atop its surface."),
    "main_room_key": Objects("Small brass key", "A small brass skeleton key. What could it unlock?", takeable=True),
}

另一种方法是在创建后设置它,但这需要它在dict items["main_room_key"].takeable = True之外进行$scope.$on()