2017-02-13 73 views
1

我有其自变量和方法的Class1一个,和一种方法内我使用来自其它类(等级2)的另一种方法:Python3.x:从其他类不inheritation访问self.xxx变量

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中使用self.xxx变量,而该变量不存在于Class1的对象(实例)中,则会为该实例创建它。这是对的吗? 所以self.1和self.2是Class1实例的变量,self.1和self.2是Class2函数的变量不一样,但是Class2的函数覆盖了Class1实例的自变量,是否正确? 但是如果我想要一个类函数使用自变量(我的意思是一个已经设置的值)的另一个类实例,我必须使用继承,正确的?

回答

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套在它的参数self属性b,当然我们希望的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