猿问

如何在课程外使用方法?

我正在学习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类中进行,并且仅此更新的调用应在我的密钥处理程序中。


有人可以给我一个例子,说明他们说这话的意思吗?我尝试在密钥处理程序中将所有变量(或论坛中提供的想法)错误定义为“未定义”。


犯罪嫌疑人X
浏览 184回答 1
1回答

MMMHUHU

有两种方法可以从该类外部调用该类的方法。更常见的方法是在类的实例上调用方法,如下所示:# pass all the variables that __init__ requires to create a new instancesuch_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 objectdef 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()
随时随地看视频慕课网APP

相关分类

Python
我要回答