Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pythonic方法来定义_init__辅助方法?_Python_Oop_Class_Coding Style - Fatal编程技术网

Pythonic方法来定义_init__辅助方法?

Pythonic方法来定义_init__辅助方法?,python,oop,class,coding-style,Python,Oop,Class,Coding Style,请原谅,我是Python新手,正在尝试学习Python方法。我正在设计一个类,它本质上是从许多不同的源(文件)初始化它的状态。我已将此行为隔离到单个实例方法,\u load\u from\u file(file)。它在\uuuu init\uuuu中被多次调用,但我通常喜欢将构造函数放在类定义的开头,将内部助手方法放在末尾 但是,如果我采用这种方法,\u load\u from\u file没有在\u init\u中我想使用它的地方定义。你们这些蟒蛇学家是如何解释这种情况的 详细说明: clas

请原谅,我是Python新手,正在尝试学习Python方法。我正在设计一个类,它本质上是从许多不同的源(文件)初始化它的状态。我已将此行为隔离到单个实例方法,
\u load\u from\u file(file)
。它在
\uuuu init\uuuu
中被多次调用,但我通常喜欢将构造函数放在类定义的开头,将内部助手方法放在末尾

但是,如果我采用这种方法,
\u load\u from\u file
没有在
\u init\u
中我想使用它的地方定义。你们这些蟒蛇学家是如何解释这种情况的

详细说明:

class Thing(object):
    def __init__(self, file_path):
        f = open('file_path')
        _load_from_file(self,"someData",f) # ISSUES!
        _load_from_file(self,"moreData",f) # WRONG!
        f.close()

    # Interface
    #     ...

    # Internal - Where do you guys put this stuff?
    def _load_from_file(self,thingToLoad,file):
        # logic

你确定它不能按照你已经使用的顺序工作吗?记住,您没有使用C。只要在调用代码时已经定义了被调用的方法,那么在调用代码之前,被调用的方法不必出现在类定义中

然而,我要改变这一点:

_load_from_file(self)
为此:

self._load_from_file()

您收到的任何未定义名称错误不是因为您的方法调用位于方法定义之前的文件位置,而是因为您试图像全局函数一样调用它,而不是通过定义了方法的对象来调用它。

您确定它不会按照您已经使用的顺序工作吗?记住,您没有使用C。只要在调用代码时已经定义了被调用的方法,那么在调用代码之前,被调用的方法不必出现在类定义中

然而,我要改变这一点:

_load_from_file(self)
为此:

self._load_from_file()

您得到的任何未定义名称错误不是因为您的方法调用位于方法定义之前的文件位置,而是因为您试图像全局函数一样调用它,而不是通过定义方法的对象来调用它。

这实际上不是“我愿意”的问题-一个有效,另一个无效。啊哈,我追求的是错误的问题。谢谢你们两个!这不是一个“我愿意”的问题——一个可行,另一个不行。啊哈,我追求的是错误的问题。谢谢你们两个!Python没有像其他语言一样将类成员归入方法的作用域中-您必须通过
self
访问它们。因此,查找是动态的-不需要按顺序或任何方式定义方法,因为只有当您在
self
对象上实际访问它们时,才会查找它们。Python不像其他语言那样,类成员在方法中属于作用域-您必须通过
self
访问它们。因此,查找是动态的——不要求您按顺序或任何方式定义方法,因为只有当您在
self
对象上实际访问它们时,才会查找它们。