Python3.x:无需继承即可从其他类访问self.xxx变量

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): ... 怎

我有一个带有自变量和方法的类1,在一个方法中我使用其他类(类2)中的另一个方法:

在Class2方法中,我使用与Class1相同的自变量名称(self.1、self.2等)

令我惊讶的是,当Class2的方法结束时,我在Class2方法中使用的自变量仍然存在于Class1对象中

如果我理解得很好,这只有在Class2继承Class1时才有可能,比如:

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.