【问题标题】:writing submodules in different file in python在python中的不同文件中编写子模块
【发布时间】:2018-04-18 09:43:10
【问题描述】:

我有点陷入我正在做的个人项目的中间。我有一个场景对我来说没有任何意义,我也不知道该怎么“称呼它”,所以我也没有从互联网上找到正确的答案。

如果您能为以下示例提供解决方案,我将不胜感激。

我正在尝试执行以下操作:

我在不同的文件中有两个类/模块(稍后可能还会在子目录中添加)。

client.py

class client(object):
    def __init__(self, user, key, address):
        self.user = user
        self.key = key
        self.address = address

foo.py

class foo(client):
    print(client.user, client.key, client.address)

现在我想通过首先启动 client() 类来调用 foo()。所以我的 test.py 文件应该是这样的,它应该打印我在启动客户端类时给出的那些值。

test.py

import client
f = client("x", "passkeyXX","10.192.0.1")
f.foo() ## should print the values given above

这可能吗?

【问题讨论】:

  • init 需要一个自我引用,你检查过你的导入是否真的有效吗?您可能需要使用 client.py 和路径来调用它,具体取决于您保存它的位置
  • 听起来你正在尝试做类似的事情 --> https://stackoverflow.com/q/46996982/7345804

标签: python class inheritance python-module


【解决方案1】:

要根据其父类之一初始化子类,您可以调用super 方法

方法一:在__init__方法中

class foo(client):
    def __init__(self):
        super(self, client).__init__(self, user, key, address)

方法二:在特定对象上创建

bar = foo().super(self, client).__init__(<user>, <key>,< address>) 

查看docs了解详情。

【讨论】:

    【解决方案2】:

    您可以在一个类中进行此操作,而不是同时创建两个:

    class Client(object):
        def __init__(self, user, key, address):
            self.user = user
            self.key = key
            self.address = address
    
        def foo(self):
            print(self.user, self.key, self.address)
    

    然后你在测试中实例化它:

    c = Client(user='user1', key='sdf234sdf13', address='USA, New York')
    

    并调用需要的方法foo:

    c.foo()
    

    应该返回你:

    user1 sdf234sdf13 美国,纽约

    更新:

    client.py

    from foo import foo as _f
    
    class Client(object):
        def __init__(self, user, key, address):
            self.user = user
            self.key = key
            self.address = address
    
        def foo(self):
            return _f(self.user, self.key, self.address)
    

    在 foo.py 中:

    def foo(user, key, address):
       print(user, key, address)
    

    现在您可以在测试中的某处导入您的类 Client。

    from client import Client
    

    创建实例:

    c = Client(user='user1', key='sdf234sdf13', address='USA, New York')
    

    打电话给c.foo(),它应该会打印出你需要的东西,但这太奇怪了

    【讨论】:

    • 感谢您的回答。但恐怕我并不是真的在寻找那个。我可以通过在同一个文件中为客户端类编写方法来执行您的建议。但这不是我想要的。我需要将 foo() 写在不同的文件中。
    • 我需要使类 foo() 成为客户端类的子类,但我需要为 foo() 创建单独的文件。我问的原因是因为我有几个(超过 50 个类)类似 foo() 的类,它们将驻留在我的模块目录中。
    • 你看,你在说什么,这不是子类化,也不合逻辑。 “foo”不能是一个类,但我可以让它像客户端类的函数一样工作,并被称为“c.foo()”。你要我这样做吗?随时提问。
    • 是的。我看到了错误。但情况仍然不会改变。我想要的只是将 foo() 放在与 client.py 不同的文件中,并且仍然是 client() 作为方法或子类的一部分。如果你能给我这样的例子,那就太好了!谢谢!!!
    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 2014-09-03
    • 2021-01-31
    • 2013-01-18
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多