【问题标题】:Accessing Methods of a class using function parameter in python [closed]在python中使用函数参数访问类的方法[关闭]
【发布时间】:2015-05-15 21:58:34
【问题描述】:

我在 python 中有一个这样的类:

class xyz:
    def abc():
          #Do Something
            def add(x,y):
                  #Add x and y
            def sub(x,y):
                  #Subtract y from x
            def mul(x,y):
                  #multiply x ynd y

注意:这里的“add”、“sub”和“mul”是嵌套方法。

  1. 是否允许制作这样的课程?
  2. 如果允许,那么我想通过函数参数访问方法“add”、“sub”和“mul”。例如:

    from xyz import xyz
    def jkl(input):
           abc.(input)  # By doing this it will raise syntax error. This is just for refernece.
    

所以,当我调用 jkl(add(2,3)) 时,它应该添加数字。同样,当我调用 jkl(sub(4,3)) 时,它应该减去数字。

可以吗?

【问题讨论】:

  • 您可以重载标准运算符。见这里:stackoverflow.com/questions/5438574/…
  • 这并不能真正回答您的问题,但对于 Python 中的 cmets,请使用 # 而不是 //。字符串文字也很好。
  • 只是一个想法:您可以创建一个字典并将函数分配给字典值。这样你就可以做 jkl(key="add", args=(2,3)) ,然后调用 abc[key](args)。但是,对于您真正尝试做的任何事情,可能有一种不同的方法会更好。
  • 可能只有我一个人,但我无法理解您要做什么。你的def abc: 块应该做什么?它只会导致语法错误。
  • 看起来 OP 正在尝试将类用作模块/包。这个问题的答案需要解释模块/包导入是如何工作的。要么那个,要么静态方法。

标签: python


【解决方案1】:

很难准确地理解您的目标是什么。

编辑:我将把这个答案留在这里,因为它已经收到了赞成票,但 OP 澄清说他们实际上是在询问如何重载运算符。

你可以这样做:

class abc():
      //Do Something
      @staticmethod
      def add(x,y):
              # Add x and y
      @staticmethod
      def sub(x,y):
              # Subtract y from x
      @staticmethod
      def mul(x,y):
              # multiply x ynd y

abc.add(1,1)

如果您想在另一个模块中使用您的类,您可以将该类定义放在文件xyz.py 中,然后放在另一个文件中(在同一目录中):

from xyz import abc

abc.add(1,1)

但是,这在 Python 世界中是一件非常奇怪的事情。我建议以不同的方式组织事情,除非你有充分的理由这样做。更好的方法是完全跳过类定义,并在abc.py 中执行此操作:

def add(x,y):
          # Add x and y
def sub(x,y):
          # Subtract y from x
def mul(x,y):
          # multiply x ynd y

然后从那个模块导入:

import abc

abc.add(1,1)
etc...

或者,您可以这样做:

from abc import add, sub, mul

add(1,1)
etc...

【讨论】:

  • 很抱歉给您带来了困惑。我只需要重载标准运算符。谢谢。
  • @sats 我建议您在问题关闭之前完全重写您的问题!或者只是重新开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 2021-06-30
  • 2022-01-18
  • 2019-06-25
  • 1970-01-01
  • 2017-11-24
相关资源
最近更新 更多