当前位置: 代码迷 >> python >> Python3.x:从其他类访问self.xxx变量而不继承
  详细解决方案

Python3.x:从其他类访问self.xxx变量而不继承

热度:61   发布时间:2023-06-13 15:34:00.0

我有一个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实例的自变量,对吗? 但是如果我想要一个类函数使用另一个类实例的自变量(我的意思是已设置的值)我必须使用继承,对吗?

你的命名不太对劲。 在Python 3中没有未绑定的方法。 假设你有一个B

class B(object):
  def x(self):
    self.b = 5

然后Bx只是一个功能

> B.x
<function B.x at 0x7f14dd0f1ae8>

只有在获得对实例的访问权限时,才会成为一种方法:

> b = B()
> b.x
<bound method B.x of <__main__.B object at 0x7f14dd1102e8>>

因此,当使用随机参数调用Bx ,它不需要是B的实例,它只会在函数中定义它 - 如果可能的话:

class A(object):
  def x(self):
    B.x(self)

由于Bx在其参数self上设置属性b ,当然我们希望A任何实例在将其传递给Bx后具有这样的属性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
  相关解决方案