在python中

时间:2017-04-06 14:28:45

标签: python class

我是python的新手,我试图在两个不同的源文件中创建两个具有相同名称的类,让我们称之为“Main.py”和“Extension.py”,类是“MyClass”。 Extesntion.py中的MyClass派生自Main.py中的MyClass。如果它工作,那么当我创建一个对象myclass我在我的代码中导入扩展然后我将有更多的功能与Main.py进行比较。

Main.py

    class MyClass:
       def __init__(self):
         Initialize something

       def foo1(self, a, b):
         Do something

然后扩展将是这样的: Extensions.py

    import Main

    class MyClass(MyClass):
       def __init__(self):
         Initialize something

       def foo2(self, a, b):
         Do something

       def foo3(self, a, b):
         Do something

然后如果我有这样的代码,我希望我不能使用foo2和foo3

    import Main

    myclass = MyClass()
    myclass.foo1(a, b)

最后如果我有这样的代码,我希望我使用所有函数

    import Extension

    myclass = MyClass()
    myclass.foo1(a, b)
    myclass.foo2(a, b)
    myclass.foo3(a, b) 

任何帮助将不胜感激:)

4 个答案:

答案 0 :(得分:3)

如果你这样做

import main

您需要使用main.MyClass从main.py创建对象。

相反,你可以做

from main import MyClass

直接提供。

如果您需要两个具有相同名称的不同类,则可以改为

from main import MyClass as MainClass

您可以在MainClass

的名称下使用该课程

答案 1 :(得分:1)

除非您from Extension import *,否则您需要指定模块才能访问该类。

import Main
import Extension
foo = Main.MyClass()
bar = Extension.MyClass()

如果您不想指定模块,那么避免名称冲突的唯一方法是使用不同的名称导入类,如下所示:

from Main import MyClass as ClassA

答案 2 :(得分:1)

使用from {module} import {name}语法显式导入给定名称时非常容易。

<强> main.py

class MyClass:
    def __init__(self):
        pass

    def foo1(self, a, b):
        pass

<强> extensions.py

from main import MyClass

class MyClass(MyClass):
    def __init__(self):
        pass

    def foo2(self, a, b):
        pass

    def foo3(self, a, b):
        pass

<强> client_main.py

from main import MyClass

myinstance = MyClass()
myinstance.foo1(a, b)

<强> client_extensions.py

from extensions import MyClass

myinstance = MyClass()
myinstance.foo1(a, b)
myinstance.foo2(a, b)
myinstance.foo3(a, b)

答案 3 :(得分:0)

通常在这种情况下,你会做import as。这允许您将导入别名作为新名称。因此,在第二个类所在的文件中,将第一个类导入为:

from main import MyClass as MainMyClass

然后在进行继承时,请参阅MainMyClass

class MyClass(MainMyClass):