Python-在不同类别中使用对象

时间:2018-07-24 12:19:20

标签: python

如何使用属于一个类的对象,在另一个不同类中的对象?我尝试了不同的方法,但是仍然没有解决方案。假设我有以下示例代码:

class ClassA():
    def __init__(self):
        print "I am ClassA"

    def methodA(self):
        print "Method executed"

class ClassB():
    def __init__(self):
        print "I am ClassB"

        self.varB = 0       

    def methodB(self):       
        if self.varB == 0:
            # Error here
            self.objectA.methodA()
        else:
            print "Method not executed"

class ClassC():
    def __init__(self):
        print "I am ClassC"

        self.objectA = ClassA()
        self.objectA.methodA()


#Step 1:
obj1 = ClassC()

#Step 2:
obj2 = ClassB()    

#Step 3: (Gives error)
obj2 = methodB()

在此示例中,我有三个类。在ClassC中,我创建一个ClassA的实例,该实例用于执行相应的方法(methodA)。如果之后我们继续执行“步骤1”,则输出为:

  

我是ClassC

     

我是ClassA

     

方法已执行

然后,在“步骤2”中,创建一个ClassB的新对象。在最后一个输出之后,我们现在也得到了:

  

我是ClassB

当我对最后一个对象执行methodB时,问题出在“步骤3”上。错误:

  

AttributeError:ClassB实例没有属性'objectA'

我非常清楚错误的根源。我不能简单地在ClassC的方法内使用在ClassB中创建的实例。

有人知道吗,我如何从ClassB访问我在其他类(objectA)中创建的实例(在这种情况下为ClassC)?

2 个答案:

答案 0 :(得分:1)

objectA属于类C的特定实例。因此,您必须以某种方式将此实例传递给类B的实例。使用它的方式,可能在类B的构造函数中:

def __init__(self, c):
    print "I am ClassB"
    self.varB = 0   
    self.objectA = c.objectA

然后

obj2 = ClassB(obj1) 

答案 1 :(得分:1)

尝试使用Python继承。继承B类中的A类。

"projects": {
    "ui": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist",
            "index": "src/index.html",
            "main": "src/main.ts",
            "tsConfig": "src/tsconfig.app.json",
            "polyfills": "src/polyfills.ts",
            "assets": [
              "src/assets",
              "./../public/images/favicon.png"
            ],
            "styles": [
              "src/styles.css",
              "./../public/stylesheets/common/css-reset.css",
              "./../public/stylesheets/common/common-styles.css",
              "./../public/stylesheets/common/vendor/bootstrap/bootstrap.css"
            ],
            "scripts": [
              "./../public/javascripts/common/vendor/jquery/jquery-3.2.1.js",
              "./../public/javascripts/common/vendor/bootstrap/bootstrap.js"
            ]
          },

这应该对您有用。