【问题标题】:Defining attributes using OOP in python在 python 中使用 OOP 定义属性
【发布时间】:2021-03-05 12:28:55
【问题描述】:

我目前在 python 中使用 OOP 来编写游戏。我创建了一个具有属性和方法的类。我想做基本的移动,如果用户键入“向北”,它将移动到北广场。然而,它说我有一个错误,北方没有定义。这是我的代码:

class square():
    def __init__(self, action, square_no, north, east, south, west):
        
        self.action = action
        self.square_no = square_no
        self.north = north
        self.east = east
        self.south = south
        self.west = west

    def user_action(action):
        action = input("---").lower()

        square.movement(action, north)

    def Help():
        print("Commands are: \n Go(north/ east /south /west) \n Mine \n Craft (object) \n Look around \n Collect (blueprint)\n Fix (wing/ thruster/ engine/ battery/ fuel tank) \n Save \n Info \n You will see this symbol when you are expected to type something ---")
        square.user_action(action)

    def movement(action, north):
             
        if action == "go north":
            print(north)

        elif action == "info":
            square.Help()   
            
        else:
            print("You can't do that here.")
            square.user_action(action)


action = ""

square1 = square(action, 1, 0, 2, 4, 0)
print(square1)

square1.user_action()

谢谢

【问题讨论】:

  • 您的实例方法需要实例本身的self 参数,然后您可以访问self.north

标签: python object oop


【解决方案1】:

您在各个地方都缺少 self 以使代码按预期工作

class square():
    def __init__(self, action, square_no, north, east, south, west):
        
        self.action = action
        self.square_no = square_no
        self.north = north
        self.east = east
        self.south = south
        self.west = west

    def user_action(self):
        action = input("---").lower()

        self.movement(action)

    def Help(self):
        print("Commands are: \n Go(north/ east /south /west) \n Mine \n Craft (object) \n Look around \n Collect (blueprint)\n Fix (wing/ thruster/ engine/ battery/ fuel tank) \n Save \n Info \n You will see this symbol when you are expected to type something ---")
        self.user_action(action)

    def movement(self,action):
             
        if action == "go north":
            print(self.north)

        elif action == "info":
            square.Help()   
            
        else:
            print("You can't do that here.")
            square.user_action(action)


action = ""

square1 = square(action, 1, 0, 2, 4, 0)
print(square1)
square1.user_action()

【讨论】:

    【解决方案2】:

    尝试使用 self.north。

    square.movement(action, self.north)
    

    您正在尝试使用未设置的名为 north 的变量。但是您的班级中确实有变量 north ,您必须通过 self..

    访问它

    希望能解决你的问题

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2018-07-06
      • 2019-05-17
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多