Python class import another file

Python import

where fileName is the name of the file from which you want to import a class, and
className is the name of the python class that needs to be imported.
Importing class from same folder
Suppose you have below folder or directory structure

where the human_def.py file contains a class. Its contents are

class Human: def name(self): return 'Alex'

Now, to use it in run.py, we need to import it as shown below

# run.py from human_def import Human # create object of class human=Human() # call class method print(human.name())

So, the syntax to import a class from same directory is,

from fileName import className

You can also assign an alias or short name to the imported class using as keyword. The class can then be referred using this short name.
Above example can be modified to

# run.py from human_def import Human as H # refer class with short name human=H() # call class method print(human.name())

Importing classes from another directory
Suppose the file from in you want to import a class is not in the same directory as the file containing the class.
So, let’s say, the structure is as below

main |-- mods |-- human_def.py |-- run.py

In this case, the syntax to import class name becomes

Читайте также:  Генератор отчета для html

from directory.fileName import className

For importing classes from a different directory, you need to add a file with name __init__.py .

This file can be empty and indicates python interpreter to treat the folder as a package containing class definition files.
Python docs state,

The __init__.py files are required to make Python treat directories containing the file as packages.

Updated folder structure should be,

main |-- mods |-- human_def.py |-- __init__.py |-- run.py

Example to import classes from another directory is given below

# run.py from mods.human_def import Human # create object of class human=Human() # call class method print(human.name())

If the class file is further nested inside other directories, then you must provide complete path of the file with the names of directories separated by a dot(.).

Thus, for the below structure

main |-- mods |-- defs |-- human_def.py |-- __init__.py |-- run.py

Class from file human_def.py should be imported as

from mods.defs.human_def.py import Human

Note that __init__.py should be present in the outer directory only. It is not required to be present in both the folders.

That is all on importing classes from another file, where the file may be present in the same directory or a different directory relative to the file where the class is being imported.
Hope the article was useful.

Источник

Best Ways in Python to Import Classes From Another File

Import Classes From Another File in Python

In this article, we will understand the need for modular programming and then will learn how to Import Classes from another file in the python programming language. We will discuss some examples to understand them more clearly. We will also understand how predefined libraries help us. So let’s get started.

Why is it needed?

So, the first question that sounds to our mind is that why we need to import any file or classes from another file? Or, Is it really important? Or, How it will affect our programming approach? Answers to all these questions are within this article.

First, understand why is it needed? In programming, we are often in situations in which we have to repeat certain operations. Writing code for them each and every time is quite a tedious task. To avoid such situations, we use the concept of Object-Oriented Programming aka OOPs.

Object Oriented Programming or OOPs

OOPs is a programming concept in which we create objects based on some defined classes having some properties (called attributes) and functions (called methods). The advantage of doing that is we can reuse it a number of times we want.

We can also implement other real-time entities like inheritance ( i.e. inheriting properties from other classes), abstraction ( i.e. information hiding), polymorphism (i.e. present in many forms) e.t.c. in it. It is an independent concept in itself, so we will talk about it somewhat later. For now, move ahead and talk about modular programming.

Modular Programming

Although, OOPs is an efficient and smart way of programming, we can’t say that it themselves solve all the problems alone. Besides the core concept of OOPs, there are some other problems we face while programming. Working on real scenarios is very different from the one that we learn.

In reality, solving any problem may require thousands of lines of codes which may have hundreds of functions and tens of classes. Maintaining all those functions and classes in one program is a difficult task. So we use the modular programming approach to cope with such situations.

Modular Programming is a programming approach in which rather than writing code for one big problem, we split it into several small independent problems. Once we solve each of them, we unite them to achieve our primary goal.

Advantages of using Modular Programming

The advantage of following the approach is that we can increase the readability of codes. We can reuse it a number of times. More, it is easy for us to maintain them and make changes to them according to our use. Moreover, it helps us a lot while debugging our program as we don’t have to fumble much in one file.

Introduction to Import Statement

Once all independent problems are solved, the question arises of how we can associate them. Here, the Python Import statement comes into the picture.

Import statement helps in importing code from other files or modules into the file we are working on. You can think of it as a bridge that gives us access to the class attributes or methods from other files so that we can use them. However, there is a proper syntax to follow to do that which we will see in a few seconds. Before that first understand the given directory structure.

application | |---- module1 | |------- __init__.py | |------- file1.py | |------- file2.py | |---- module2 |------- file3.py

So, in the given directory structure we have an application folder that contains two folders named module1 and module2. Inside each folder, we have files named file1, file2, and file3 respectively. Now, we will discuss different scenarios of importing classes or files one by one. Here we go,

Import Classes From Another File

In this example, first, we will define a class in file1.py and then import it in file2.py.

application/module1/file1.py
class ArithmeticOperations: def __init__(self): self.sum_ = 0 def get_sum(self,num1,num2): self.sum_ = num1+num2 return self.sum_
application/module1/file2.py
import file1 obj = file1.ArithmeticOperations() c = obj.get_sum(3,8) print(c)

In the above example, we imported file1 using the “import” statement. After that, we create an instance of the class we want to use i.e. ArithmeticOperations by referring to it. We can understand it as;

  • We imported the file named file1.
  • After that, we refer to that class using file1.ArithmeticOperations() and assign it to variable obj.
  • After that, we call get_sum function by using ‘obj’ object.
  • And, then print the result assigned in ‘c‘ variable.

We can also do it using “from import ” statement. Take a look at it;

from file1 import ArithmeticOperations obj = ArithmeticOperations() print(obj.get_sum(9,11))

Import All classes from Another File

In this section, we will discuss how we can import all the classes at once from another file. Sometimes, it is the scenario that it is needed to import all the classes from other files. In that case, we use “from import *” statement. We can read it as from file_name import all. It means that we imported all the available classes from the given file. Let’s look at its example.

application/module1/file1.py
class ArithmeticOperations: def __init__(self): self.sum_ = 0 def get_sum(self,num1,num2): self.sum_ = num1+num2 return self.sum_ class PrintData: def __init__(self): self.data = "" def print_data(self,data): self.data = data return self.data
application/module1/file2.py
from file1 import * obj1 = ArithmeticOperations() print(obj1.get_sum(9,11)) obj2 = PrintData() print(obj2.print_data("Accessing Another class from file1"))
Output: 20 Accessing Another class from file1

Import Classes From Another Folder

In this example, we will use ArithmeticOperations class in file3.py i.e located in another folder i.e module1. But before doing that we have to include __init__. py file in module1 which tells the interpreter that the module is within the same package.

We also have to specify the path of module1. For that, we will use the “sys” module. Let’s look at the code.

import sys sys.path.insert(0,"..") from module1.file1 import ArithmeticOperations obj = ArithmeticOperations() print(obj.get_sum(8,23))

‘sys.path.insert(0,”..”) ‘ This line of code tells the interpreter that first come out of the current directory to parent directory and then look for the module there.

Import Classes From Predefined Libraries

In the above example, we used “import sys” which is a predefined library and we want to import it and use its functionalities.

sys.path.insert(); We can understand, that we want to use the insert method from the path class that is present in the sys module. Using such dependencies and modules make our works easier as we don’t need to write code for those function explicitly. We just need the knowledge of the given package and how to use it.

Python import class from Another File Absolute Path

Use the sys module to import from another file. Use the absolute path as the argument.

import sys sys.path.append('absolute path') import module

Now after appending the filepath, you can import whichever class module you want.

Python import class from Another file Module Not Found

This can happen if the path which you have specified as argument can’t access the module. So to correct this error, check the path including the subdirectory or the directory that you have stated.

How to use __import__ to import a class from other files in Python?

We can use the following code in file2.py to import the class from file1 dynamically.

class Dynamic_import: def __init__(self,module_name,class_name): #__init__ method is used to import the module which takes module name as theparameter module = __import__(module_name) # getattr() is used to import class name form the module we imported class_nm = getattr(module,class_name) data= class_nm.get_sum(class_nm,3,8) print(data) obj = Dynamic_import("file1","ArithmeticOperations")

How to import class dynamically?

We can import class dynamically using __import__ magic function or imp module.

import imp import sys #dynamic import def dynamic_imp(name, class_name): # imp.find_module() returns the path and description of given module fp, path, desc = imp.find_module(name) #imp.load_module() returns either class or package package = imp.load_module(name, fp, path, desc) class_ = imp.load_module("% s.% s" % (name, class_name), fp, path, desc) return package, class if name == "main": mod, modCl = dynamic_imp("file1 ","addNumbers") modCl.addNumbers(1, 2)

FAQs

In this case, the issue lies within the reference of the source class you want to import. The answer to this question depends on various conditions in which you want to import the file. We have discussed all of the above and you can refer to them according to your condition.

# Run the following command
!pip install ipynb

# You can import other notebooks using
from ipynb.fs.full. import *

To import from the same directory, create an __init__.py file in this directory. This will imply successful import.

Directories can be changed to modules with the help of __init__.py. Also, we can import a function from another file in the same directory by writing this function in the directory.

Conclusion

In this article, we looked at how we can import classes from other files or folders. We also gained knowledge about Modular Programming and Import Statement.

I hope this article helps you. Thank You!

Источник

Оцените статью