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

在类定义之外定义方法?

南宫保臣
2023-03-14
问题内容
class MyClass:
    def myFunc(self):
        pass

我可以MyFunc()在类定义之外创建,甚至可以在另一个模块中创建吗?


问题答案:

是。您可以在类外部定义函数,然后在类主体中将其用作方法:

def func(self):
    print("func")

class MyClass:
    myMethod = func

您也可以在定义一个函数后将其添加到类中:

class MyClass:
    pass

def func(self):
    print("func")

MyClass.myMethod = func

您可以根据需要在不同的模块中定义函数和类,但是我建议不要在一个模块中定义该类,然后再将其导入另一个模块中并向其中动态添加方法(如第二个示例),因为那样的话d根据是否已导入另一个模块,其行为与类具有令人惊讶的不同。

我要指出的是,尽管这在Python中是可能的,但这有点不寻常。您在评论中提到“允许用户添加更多”方法。听起来很奇怪。如果您正在编写一个库,则可能不希望该库的用户向该库中的类动态添加方法。库用户创建自己的继承自您的类的子类比直接更改您的子类更为正常。



 类似资料:
  • 问题内容: 我想创建一个类,作为的内部类,但是我想写下外部文件。 我怎样才能做到这一点? 这将是很多内部类,而文件将是 巨大的 。 更新 我真正想做的是定义十个类,它们只能由一个类访问。所有这些都在同一包内定义。 谢谢。 问题答案: 将所有类放入包中,并将这些类定义为包私有。 注意没有关键字吗?如果创建类Hello的实例在包中,则您将只能创建该实例的实例。

  • 类定义 特殊类定义 模块定义 方法定义 方法定义的嵌套 方法的计算 特殊方法定义 类方法的定义 调用限制 与定义有关的操作 alias undef defined? 类定义 例: class Foo < Super def test : end : end 语法: class 标识符 [`<' superclass ] 表达式.. end 语法:ruby 1.7

  • 所以我想试试http客户端 我的模块信息是这样的 但我得到 我真的不明白为什么。我的java版本是“build 9-ea 169”,我使用的是IntelliJ idea的最新版本(2017.1.3)。我研究了这个答案,看起来我必须将需求添加到一个文件中,但由于某些原因,它不起作用。

  • 外部定义 有时候创建一个由多个不同检出得到的工作拷贝是非常有用的,举个例子,你或许希望不同的子目录来自不同的版本库位置,或者是不同的版本库。你可以手工设置这样一个工作拷贝—使用svn checkout来创建这种你需要的嵌套的工作拷贝结构。但是如果这个结构对所有的用户是很重要的,每个用户需要执行同样的检出操作。 很幸运,Subversion提供了外部定义的支持,一个外部定义是一个本地路经到URL的影

  • 在阅读了诸如sfinae关于在类主体之外定义的成员函数(这不是同一个问题)等问题之后,我仍然没有找到在使用sfinae方法仅使用算术类型启用类时在类声明之外定义成员函数主体的好方法。 在本例中,我得到错误:

  • 我正在使用productid作为电话表中的外键。我不知道在PhoneRepository的id部分写什么。因为给出错误 Product.java phone.java PhoneRepository.Java 错误