为了账号安全,请及时绑定邮箱和手机立即绑定

如何在课程外使用方法?

如何在课程外使用方法?

犯罪嫌疑人X 2021-03-16 13:09:01
我正在学习python类。我在我们的论坛上要求提供有关此方面的提示,但是没有运气。我认为我的实施非常糟糕。我对此很陌生,所以即使我提出问题的方式也要忍受。上面的问题是告诉我我需要做的事情。我已经尝试过,但是没有运气,所以我来这里寻求帮助。最终,我试图让我的按键处理程序响应我的按键操作。之前我已经做过,但是我们还没有开始上课。那就是障碍所在。我应该实现类方法/变量以使其工作,而不要使用新的变量或新的全局变量。例如class SuchAndSuch:    def __init__(self, pos, vel, ang, ang_vel, image, info, sound = None):        self.pos = [pos[0],pos[1]]        self.vel = [vel[0],vel[1]]        self.angle = ang        self.angle_vel = ang_vel        self.image = image    def update(self):        # this is where all the actual movement and rotation should happen        ...下面的处理程序在SuchAndSuch类之外:def keydown(key):    # need up left down right buttons    if key == simplegui.KEY_MAP["up"]:        # i'm supposed to just call methods here to make the keys respond???    ...因此,所有更新都应该在SuchAndSuch类中进行,并且仅此更新的调用应在我的密钥处理程序中。有人可以给我一个例子,说明他们说这话的意思吗?我尝试在密钥处理程序中将所有变量(或论坛中提供的想法)错误定义为“未定义”。
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

有两种方法可以从该类外部调用该类的方法。更常见的方法是在类的实例上调用方法,如下所示:


# pass all the variables that __init__ requires to create a new instance

such_and_such = SuchAndSuch(pos, vel, ang, ang_vel, image, info)


# now call the method!

such_and_such.update()

就那么简单!self方法定义中的参数引用该方法被调用的实例,并作为第一个参数隐式传递给该方法。您可能希望such_and_such成为模块级(“全局”)对象,因此每次按键时都可以引用和更新同一对象。


# Initialize the object with some default values (I'm guessing here)

such_and_such = SuchAndSuch((0, 0), (0, 0), 0, 0, None, '')


# Define keydown to make use of the such_and_such object

def keydown(key):

    if key == simplegui.KEY_MAP['up']:

        such_and_such.update()

        # (Perhaps your update method should take another argument?)

第二种方法是调用类方法。这可能不是您真正想要的,但是为了完整起见,我将对其进行简要定义:类方法绑定到a class,而不是该类的实例。您使用装饰器声明它们,因此您的方法定义如下所示:


class SuchAndSuch(object):

    @classmethod

    def update(cls):

        pass # do stuff

然后,您可以在没有类实例的情况下调用此方法:


SuchAndSuch.update()


查看完整回答
反对 回复 2021-03-30
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信