当前位置: 首页 > 面试题库 >

类中的Python调用方法

白侯林
2023-03-14
问题内容

我在这里超负荷工作,但是请耐心等待这位Python业余爱好者。我是一名从事贸易的PHP开发人员,以前几乎没有接触过这种语言。

我想做的是在类中调用方法…听起来很简单?对于“自我”是什么,以及在类内和类外调用这种方法的正确过程,我完全感到困惑。

有人 可以 向我 解释
如何move用变量调用方法RIGHT。我曾尝试在多个“学习python”站点上进行研究,并在StackOverflow上进行搜索,但无济于事。任何帮助将不胜感激。

以下类在Scott的Python脚本中工作,该脚本可通过终端GUI(urwid)访问。

我正在使用的功能是Scott Weston的导弹发射器Python脚本,我正尝试将其连接到PHP Web服务器。

class MissileDevice:
  INITA     = (85, 83, 66, 67,  0,  0,  4,  0)
  INITB     = (85, 83, 66, 67,  0, 64,  2,  0)
  CMDFILL   = ( 8,  8,
                0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0)
  STOP      = ( 0,  0,  0,  0,  0,  0)
  LEFT      = ( 0,  1,  0,  0,  0,  0)
  RIGHT     = ( 0,  0,  1,  0,  0,  0)
  UP        = ( 0,  0,  0,  1,  0,  0)
  DOWN      = ( 0,  0,  0,  0,  1,  0)
  LEFTUP    = ( 0,  1,  0,  1,  0,  0)
  RIGHTUP   = ( 0,  0,  1,  1,  0,  0)
  LEFTDOWN  = ( 0,  1,  0,  0,  1,  0)
  RIGHTDOWN = ( 0,  0,  1,  0,  1,  0)
  FIRE      = ( 0,  0,  0,  0,  0,  1)

  def __init__(self, battery):
    try:
      self.dev=UsbDevice(0x1130, 0x0202, battery)
      self.dev.open()
      self.dev.handle.reset()
    except NoMissilesError, e:
      raise NoMissilesError()

  def move(self, direction):
    self.dev.handle.controlMsg(0x21, 0x09, self.INITA, 0x02, 0x01)
    self.dev.handle.controlMsg(0x21, 0x09, self.INITB, 0x02, 0x01)
    self.dev.handle.controlMsg(0x21, 0x09, direction+self.CMDFILL, 0x02, 0x01)

问题答案:

通常将所有方法的第一个参数称为self。它指的是为其调用方法的实例。

假设您有:

class A(object):
    def foo(self):
        print 'Foo'

    def bar(self, an_argument):
        print 'Bar', an_argument

然后,执行以下操作:

a = A()
a.foo() #prints 'Foo'
a.bar('Arg!') #prints 'Bar Arg!'

调用并没有什么特别的self,您可以执行以下操作:

class B(object):
    def foo(self):
        print 'Foo'

    def bar(this_object):
        this_object.foo()

然后,执行以下操作:

b = B()
b.bar() # prints 'Foo'

在您的特定情况下:

dangerous_device = MissileDevice(some_battery)
dangerous_device.move(dangerous_device.RIGHT)

(如评论中所建议,MissileDevice.RIGHT此处可能更合适!)

可以 在模块级别声明所有常量,因此可以执行以下操作:

dangerous_device.move(RIGHT)

但是,这将取决于您希望代码的组织方式!



 类似资料:
  • 问题内容: 在Python中创建简单的对象层次结构时,我希望能够从派生类中调用父类的方法。在Perl和Java中,有一个用于此的关键字()。在Perl中,我可以这样做: 在Python中,似乎必须从子代中明确命名父类。在上面的示例中,我将不得不执行。 这似乎不正确,因为这种行为使创建深层次结构变得困难。如果孩子们需要知道哪个类定义了一个继承的方法,那么就会造成各种各样的信息痛苦。 这是python

  • 通过前面的学习,类方法大体分为 3 类,分别是类方法、实例方法和静态方法,其中实例方法用的是最多的。我们知道,实例方法的调用方式其实有 2 种,既可以采用类对象调用,也可以直接通过类名调用。 通常情况下,我们习惯使用类对象调用类中的实例方法。但如果想用类调用实例方法,不能像如下这样: 运行上面代码,程序会报出如下错误: Traceback (most recent call last):   Fi

  • 问题内容: 我在Java项目中使用Jython。 我有一个Java类:和一个Python类: Python文件如下: 现在的问题是我想从Java文件的方法调用Python文件的方法并打印结果。 问题答案: 如果我没看错文档,则可以使用以下功能: 或者,如果您想获取字符串: 如果要向其提供Java变量的某些输入,则可以预先使用,而不要在Python代码中使用该变量名:

  • 代码:- 在这里,当我用mydog对象调用eat()方法时,它会打印出“dog eating”,有没有办法用mydog对象调用base Animal类的eat()方法,比如有没有像这样的东西 我不想使用super(),因为这样它也会从child类调用eat(),所以它会同时打印语句“animal eating”和“dog eating”,这是我不想要的,我想一次只调用一个语句。

  • 问题内容: 最初,我有一个类来存储一些处理后的值,并将其与其他方法重用。 问题是,当我尝试将类方法划分为多个进程以加快速度时,python生成了进程,但它似乎不起作用(正如我在“任务管理器”中看到的那样,只有1个进程在运行)并且结果从未交付。 我进行了几次搜索,发现pathos.multiprocessing可以代替它,但是我想知道标准库是否可以解决这个问题? 问题答案: 您的代码失败了,因为它无

  • 问题内容: 我不明白如何使用类。当我尝试使用该类时,以下代码给我一个错误。 错误: 怎么了? 问题答案: 您可以通过声明变量并像调用一个函数一样实例化该类: 但是,这不适用于您提供给我们的代码。当您在给定对象(x)上调用类方法时,它在调用函数时始终将指向该对象的指针作为第一个参数传递。因此,如果您现在运行代码,则会看到以下错误消息: 要解决此问题,您需要修改平均值方法的定义以采用四个参数。第一个参