Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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
python MySQL模块类文件名_Python_File_Class_Directory_Module - Fatal编程技术网

python MySQL模块类文件名

python MySQL模块类文件名,python,file,class,directory,module,Python,File,Class,Directory,Module,我不知道目录名、文件名和类名是如何一起工作的 这就是我现在所拥有的 app.py 数据库/ client.py staff.py order.py 在client.py中,我有一个名为client的类,它充当数据库模型(MVC)。与我的其他文件相同:staff.py有一个名为staff,order.py有order 然后在app.py中执行以下操作: 从数据库导入客户端作为模型 c=model.client() 然后我就糊涂了。在理想的世界里,这就是我想做的事: from .client i

我不知道目录名、文件名和类名是如何一起工作的

这就是我现在所拥有的

app.py
数据库/
client.py
staff.py
order.py
client.py
中,我有一个名为
client
的类,它充当数据库模型(MVC)。与我的其他文件相同:
staff.py
有一个名为
staff
order.py
order

然后在app.py中执行以下操作:

从数据库导入客户端作为模型
c=model.client()
然后我就糊涂了。在理想的世界里,这就是我想做的事:

from .client import clientclass as client
from .staff import staffclass as staff
from .order import orderclass as order
  • 将我的数据库模型类保存在各自目录中的单独文件中

  • model
        __init__.py
        client.py
        staff.py
        order.py
    
  • 像这样使用它们:

  • c=model.client()
    o=模型。订单()
    s=model.staff()
    
    我能看到的唯一方法是将所有类放在一个名为
    model.py
    的文件中,并将其保存在根目录下


    我确信我在这里遗漏了一些非常基本的东西。

    Python有两种导入内容的基本方法。模块和包


    模块只是包含路径上的python文件:order.py

    如果order.py定义了一个名为foo的类,那么可以通过以下方式访问该类:

    import order
    o = order.foo()
    
    为了使用原始问题的语法,您需要确保model.py文件具有以下属性:[客户、员工、订单]

    但是,这通常意味着将它们放在单个文件中。这就是你想要避免的


    包是一个目录,其内部有一个\uuuu init\uuuuuuuuuuuupyinit.py初始化包(即,它在第一次导入时运行),您可以在该目录中拥有模块或子包

    model
        __init__.py
        client.py
        staff.py
        order.py
    
    这样,要访问任何子模块,您只需说:

    import model.client
    
    但是,这只是导入模块。它不导入模块的任何属性。因此,为了访问模块内的类,您需要指定它:

    import model.client
    o = model.client.clientclass()   
    
    这有点乏味,但组织得很好


    两者兼而有之(性能不是什么大问题):

    如果在\uuuu init\uuuuu.py中键入以下代码:

    from .client import clientclass as client
    from .staff import staffclass as staff
    from .order import orderclass as order
    
    然后,您已经自动加载了所有类,可以通过以下方式访问它们:

    import model
    c = model.client()
    s = model.staff()
    o = model.order()
    

    最后,坚持使用非魔法的方法可能更简单:

    import model.client
    o = model.client.clientclass()   
    

    --Gahooa

    那么我说得对吗?你的问题是,你在一个名为X的文件中有一个名为X的类,所有这些文件都在一个名为Y的包中,你只想说Y.X()(这样就不用提X了)?我不知道-我既没有X也没有Y;)另一个问题:详细方式[o=model.client.clientclass()]是否会将实现细节泄漏到代码中?比如说,在重构过程中,您决定将一个类(例如clientclass)移动到它自己的文件中,您需要更改创建新clientclass的数百行代码。(我的chars用完了…)@monk.e.boy:性能降低,因为即使您只需要一个文件,也会导入所有文件。如果它是一个长时间运行的进程,或者是一个简单的程序,那么没有问题。但是如果要大量加载,可能会产生影响。@monk.e.boy:实现细节(IMO)应该在类级别,而不是模块级别。换句话说,实现者应该在某个时候知道公共类名。