是否可以在实例初始化时为现有对象包含一个新方法? [复制]

Posted

技术标签:

【中文标题】是否可以在实例初始化时为现有对象包含一个新方法? [复制]【英文标题】:is it possible to include a new method to existing object at instance initialization? [duplicate] 【发布时间】:2014-06-28 18:30:21 【问题描述】:

这是我在 python 3.4 中的尝试:

import imp

def my_example_function():
  print("my_example_function:")

class my_class:
  def __init__(self):
    module = imp.load_source(my_example_function, __file__)

my_class_instance = my_class()

结果是:

Traceback (most recent call last):
  File "D:\Python34\test.py", line 10, in <module>
    my_class_instance = my_class()
  File "D:\Python34\test.py", line 8, in __init__
    module = imp.load_source(my_example_function, __file__)
  File "D:\python34\lib\imp.py", line 166, in load_source
    spec = util.spec_from_file_location(name, pathname, loader=loader)
  File "<frozen importlib._bootstrap>", line 932, in spec_from_file_location
  File "<frozen importlib._bootstrap>", line 1439, in is_package
AttributeError: 'function' object has no attribute 'rpartition'

看起来像是某种内部错误,是 python 本身的错误。

【问题讨论】:

导入是针对模块,而不是函数.. 我现在对***.com/questions/972/… 不太了解,有人可以告诉我我的代码有什么问题吗?我想在 python 中尝试的东西是合法的吗? 如我所说;导入用于模块。向实例添加方法不是导入。 但无论如何这个错误本身就是一个错误,它非常神秘。 不,您使用的函数需要一个字符串;它是这样记录的。传递任何其他内容都会中断。 【参考方案1】:

错误说,“函数”对象没有属性“rpartition”。您提供给load_source 的唯一函数对象是my_example_function,但需要一个名称即字符串。 字符串有一个名为rpartition 的方法。 所以如果你正确使用load_source,你就不会出错。但我不能说,怎么做,因为我不明白你想做什么。

【讨论】:

以上是关于是否可以在实例初始化时为现有对象包含一个新方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在现有 C++ QT 项目中实例化 QML 对象

C/C++编程笔记:高级C++知识 |虚拟副本构造器

第五周学习总结

构造函数

复用类@1

Java编程思想(七复用类)