擅长:python、mysql、java
<p>在Python中,import语句用于模块,而不是类。。。所以要导入一个类,你需要</p>
<pre><code>from mymodule import MyClass
</code></pre>
<p>关于你的问题,答案是肯定的。在Python中,类只是常规对象,类方法只是存储在对象属性中的函数。</p>
<p>此外,Python中对象实例的属性是动态的(您可以在运行时添加新的对象属性),这一事实与前一个事实相结合意味着您可以在运行时向类添加新方法。</p>
<pre><code>class MyClass:
def __init__(self, x):
self.x = x
...
obj = MyClass(42)
def new_method(self):
print "x attribute is", self.x
MyClass.new_method = new_method
obj.new_method()
</code></pre>
<p>这怎么行?当你打字的时候</p>
<pre><code>obj.new_method()
</code></pre>
<p>Python将执行以下操作:</p>
<ol>
<li><p>在对象内部查找<code>new_method</code>。</p></li>
<li><p>如果找不到它作为实例属性,它将尝试在类对象(可用作<code>obj.__class__</code>)中查找函数。</p></li>
<li><p>现在有一点诡计,因为Python会注意到它找到的是一个<strong>函数,因此会将它“包装”在一个闭包中,以创建所谓的“绑定方法”。这是必需的,因为当您调用<code>obj.new_method()</code>时,您希望调用<code>MyClass.new_method(obj)</code>。。。换句话说,将函数绑定到<code>obj</code>以创建绑定方法是添加<code>self</code>参数的工作。</p></li>
<li><p>这个绑定方法是由<code>obj.new_method</code>返回的,然后由于这行代码的结尾<code>()</code>而最终调用它。</p></li>
</ol>
<p>如果对类的搜索也没有成功,那么父类也会按照特定的顺序进行搜索,以找到继承的方法和属性,因此事情会稍微复杂一些。</p>