有关Python OOP __init__方法的问题

时间:2018-10-03 01:21:27

标签: python oop

我对Python OOP的__init__方法有一个简短的疑问,可以在此寻求帮助。

假设我有一个名为basic_backend.py的模块,其中包含以下代码:

items = list()


def create_items(app_items):

    global items
    items = app_items

然后我有另一个MVC模块,我在其中写过:

import basic_backend

class ModelBasic(object):

    def __init__(self, app_items):
        self._item_type = 'product'
        self.create_items(app_items)

我的问题是,在__init__方法中,我能够使用self从导入的模块中调用该函数。为什么我能做到这一点?我不确定这背后的理论。

老师请帮忙!

非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为您在这里误解了代码。

self.create_items(app_items)不是在调用 basic_backend 的函数,而是在调用 ModelBasic 不存在的函数。

self是一个变量,是对当前对象的引用

def __init__(self, app_items):
    self._item_type = 'product'
    self.create_items(app_items)

在这里,您可以看到第一个参数是self,可以将其命名为任何名称,但这是将其命名为self的约定。

python调用此方法时所执行的操作是将当前对象传递给第一个参数。 self.item_type说,使用此对象,并将变量item_type定义为字符串'product'

但是,self.create_items(app_items)将失败,因为您的对象没有app_items方法。