我有一个Class1及其自变量和方法,在一个方法中我使用其他类的另一个方法(Class2):
import Class2
class Class1:
def __init__(self):
self.1 = None
self.2 = None
...
def method1(self):
do something
...
def methodN(self):
Class2.method(self):
...
在Class2方法中,我使用Class1的相同自变量名(self.1,self.2等)。
令我惊讶的是,当Class2的方法到达结尾时,我在Class2方法中使用的自变量仍然存在于Class1对象中。
如果我理解的话,这只有在Class2继承Class1时才有可能,例如:
import Class1
class Class2(Class1):
Class1.__init__(self):
...
怎么可能?
感谢所有
编辑:schwobaseggl,非常感谢你的解释。现在我已经理解了函数和方法之间的区别(在某些书中,这些单词被用作synonims)。所以在我的情况下,我不使用方法而是使用函数,我也理解如果我在Class2中使用不存在于Class1的对象(实例)中的self.xxx变量,它将为实例创建。这是对的吗? 所以Class1和self.1实例的self.1和self.2变量以及Class2函数的self.2变量不一样,但是Class2的函数会覆盖Class1实例的自变量,对吗? 但是如果我想要一个类函数使用另一个类实例的自变量(我的意思是已设置的值)我必须使用继承,对吗?答案 0 :(得分:0)
你的命名不太对劲。在Python 3中没有未绑定的方法。假设您有一个类B
,如
class B(object):
def x(self):
self.b = 5
然后B.x
只是一个函数
> B.x
<function B.x at 0x7f14dd0f1ae8>
只有在获得对实例的访问权限时,才会成为一种方法:
> b = B()
> b.x
<bound method B.x of <__main__.B object at 0x7f14dd1102e8>>
因此,当使用随机参数调用B.x
时,它不需要是B
的实例,它只会在函数中定义它 - 如果可能的话:
class A(object):
def x(self):
B.x(self)
由于B.x
在其参数b
上设置了属性self
,我们当然希望A
的任何实例都具有此类属性b
将其传递给B.x
:
> a = A()
> a.x()
> a.b
5
您甚至不需要在类中定义方法:
def x(arg):
arg.a = 7
class A(object):
x = x
> a = A()
> A.x
<function x at 0x7f14dd0f1378>
> a.x
<bound method x of <__main__.A object at 0x7f14db39aa90>>
> a.x()
> a.a
7