Python3.x:无需继承即可从其他类访问self.xxx变量
我有一个带有自变量和方法的类1,在一个方法中我使用其他类(类2)中的另一个方法: 在Class2方法中,我使用与Class1相同的自变量名称(self.1、self.2等) 令我惊讶的是,当Class2的方法结束时,我在Class2方法中使用的自变量仍然存在于Class1对象中 如果我理解得很好,这只有在Class2继承Class1时才有可能,比如:Python3.x:无需继承即可从其他类访问self.xxx变量,python,python-3.x,Python,Python 3.x,我有一个带有自变量和方法的类1,在一个方法中我使用其他类(类2)中的另一个方法: 在Class2方法中,我使用与Class1相同的自变量名称(self.1、self.2等) 令我惊讶的是,当Class2的方法结束时,我在Class2方法中使用的自变量仍然存在于Class1对象中 如果我理解得很好,这只有在Class2继承Class1时才有可能,比如: import Class1 class Class2(Class1): Class1.__init__(self): ... 怎
import Class1
class Class2(Class1):
Class1.__init__(self):
...
怎么可能呢
多谢大家
编辑:施沃巴塞格,非常感谢你的解释。现在我已经理解了函数和方法之间的区别(在一些书中,这些词被当作大纲使用)。因此,在我的例子中,我不使用方法,而是使用函数,并且我还了解,如果我在Class2中使用一个self.xxx变量,而该变量在Class1的对象(实例)中不存在,那么它将为该实例创建。对吗?
所以Class1实例的self.1和self.2变量与Class2函数的self.1和self.2变量不一样,但是Class2函数覆盖了Class1实例的self变量,对吗?
但是如果我想让一个类函数使用另一个类实例的自变量(我指的是已经设置的值),我必须使用继承,对吗?您的命名不太正确。在Python3中,没有未绑定的方法。假设您有一个类
B
like
class B(object):
def x(self):
self.b = 5
那么B.x
只是一个函数
> B.x
<function B.x at 0x7f14dd0f1ae8>
由于B.x
在其参数self
上设置了一个属性B
,因此我们当然希望A
的任何实例在传递给B.x
后都具有这样的属性B
:
> 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
def x(arg):
参数a=7
A类(对象):
x=x
>a=a()
>A.x
>a.x
>a.x()
>a.a
7.
您的命名不太正确。在Python3中,没有未绑定的方法。假设您有一个类B
like
class B(object):
def x(self):
self.b = 5
那么B.x
只是一个函数
> B.x
<function B.x at 0x7f14dd0f1ae8>
由于B.x
在其参数self
上设置了一个属性B
,因此我们当然希望A
的任何实例在传递给B.x
后都具有这样的属性B
:
> 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
def x(arg):
参数a=7
A类(对象):
x=x
>a=a()
>A.x
>a.x
>a.x()
>a.a
7.