কম্পিউটার

Python TypeError:'মডিউল' অবজেক্ট কলযোগ্য সমাধান নয়

পাইথন মডিউলগুলি বিভ্রান্তিকর, বিশেষ করে যখন আপনি নিজের সংজ্ঞায়িত করেন। "TypeError:'মডিউল' অবজেক্ট কল করা যায় না" ক্লাসের সাথে কাজ করার সময় পাইথন ডেভেলপাররা যে ভুলগুলি করে থাকে তার মধ্যে একটি সবচেয়ে সাধারণ ভুল।

এই নির্দেশিকায়, আমরা এই ত্রুটির অর্থ কী এবং কেন এটি উত্থাপিত হয় সে সম্পর্কে কথা বলি। এই ত্রুটিটি কাটিয়ে উঠতে আপনাকে সাহায্য করার জন্য আমরা একটি উদাহরণ কোড স্নিপেট দিয়ে চলেছি। শুরু করা যাক!

সমস্যা:TypeError:'মডিউল' অবজেক্ট কলযোগ্য নয়

যেকোনো পাইথন ফাইল একটি মডিউল হয় যতক্ষণ না এটি ".py" এক্সটেনশনে শেষ হয়।

মডিউলগুলি পাইথনের একটি গুরুত্বপূর্ণ অংশ কারণ তারা আপনাকে একটি প্রধান প্রোগ্রামের বাইরে ফাংশন, ভেরিয়েবল এবং ক্লাস সংজ্ঞায়িত করতে দেয়। এর মানে হল আপনি আপনার কোডটিকে একাধিক ফাইলে ভাগ করতে পারেন এবং আরও কার্যকরভাবে শ্রেণীবদ্ধ করতে পারেন।

মডিউল একটি নির্দিষ্ট উপায়ে আমদানি করতে হবে। অন্যথায়, পাইথন একটি ত্রুটি প্রদান করে:

TypeError: 'module' object is not callable

এটি ঘটে যখন আপনি একটি ফাংশন হিসাবে একটি মডিউল আমদানি করার চেষ্টা করেন৷

একটি উদাহরণ দৃশ্য

"কেক" নামক একটি মডিউল সংজ্ঞায়িত করুন। এই মডিউলটিতে একটি ফাংশন রয়েছে:read_file। read_file ফাংশন একটি টেক্সট ফাইলের বিষয়বস্তু পড়বে।

আমাদের ফাইলের নাম আমাদের মডিউলের নাম নির্ধারণ করে। যেহেতু আমরা আমাদের মডিউলটিকে "কেক" বলা চাই, তাই আমরা cakes.py নামে একটি ফাইলে আমাদের কোড লিখি:

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।

def read_file():
	all_cakes = []
	with open("cakes.txt", "r") as cake_file:
		cake_list = cake_file.readlines()
		for c in cake_list:
			all_cakes.append(c.replace("\n", ""))

	return all_cakes

এই ফাংশনটি "cakes.txt" নামে একটি ফাইলের বিষয়বস্তু পড়ে। তারপরে এটি ফাইলের প্রতিটি পাঠ্যের লাইনের মাধ্যমে পুনরাবৃত্তি করে এবং প্রতিটি লাইনকে "all_cakes" নামক একটি তালিকায় যোগ করে।

রিপ্লেস() পদ্ধতিটি খালি মান দিয়ে যেকোনো নতুন লাইন (“\n”) অক্ষর প্রতিস্থাপন করতে ব্যবহৃত হয়। এটি সমস্ত নতুন লাইন সরিয়ে দেয়। আমরা আমাদের ফাংশন শেষে "all_cakes" ফেরত দিই।

এখন, app.py নামে একটি ফাইল খুলুন এবং এই কোডটি পেস্ট করুন:

import cakes

cake_list = cakes()
print(cake_list)

এই কোডটি "cakes.txt" ফাইলের বিষয়বস্তু পড়ার জন্য আমাদের "কেক" মডিউল ব্যবহার করে। এটি তারপর ফাইলটিতে ফাংশনটি পাওয়া সমস্ত কেক প্রিন্ট করে।

আসুন আমাদের কোড রান করি:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
	cakes = cakes()
TypeError: 'module' object is not callable

আমাদের কোড একটি ত্রুটি প্রদান করে৷

সমাধান

আমাদের app.py ফাইলে আমদানি বিবৃতিটি একবার দেখে নেওয়া যাক:

import cakes

আমরা মডিউল "কেক" আমদানি করি। এতে সমস্ত ভেরিয়েবল, ক্লাস এবং ফাংশন রয়েছে যা আমরা “cakes.py” ফাইলে ঘোষণা করি।

এখন, আসুন আমাদের পরবর্তী কোডের লাইনটি দেখি:

cake_list = cakes()

যদিও "কেক" মডিউলটিতে শুধুমাত্র একটি ফাংশন রয়েছে, আমরা সেই ফাংশনটি কী তা নির্দিষ্ট করি না। এটি পাইথনকে বিভ্রান্ত করে কারণ এটি কোন ফাংশনের সাথে কাজ করা উচিত তা জানে না।

এই ত্রুটিটি সমাধান করার জন্য, আমরা মডিউলের পরিবর্তে যে ফাংশনটি উল্লেখ করতে চাই তার নাম বলি:

import cakes

cake_list = cakes.read_file()
print(cake_list)

আসুন আবার আমাদের কোড চালানোর চেষ্টা করি:

['Cinnamon Babka', 'Chocolate Cupcake']

আমাদের কোড সফলভাবে কেকের তালিকা প্রদান করে।

আমাদের app.py ফাইলে, আমরা cakes.read_file() কল করি।

পাইথন "cakes.py" ফাইলটি দেখে যেখানে আমাদের "কেক" মডিউল সংরক্ষণ করা হয় এবং read_file() সনাক্ত করে ফাংশন তারপর, পাইথন সেই ফাংশনটি চালায়।

আমরা read_file()-এর ফলাফল বরাদ্দ করি "cake_list" নামক একটি ভেরিয়েবলের ফাংশন। তারপর, আমরা সেই তালিকাটি কনসোলে প্রিন্ট করি।

বিকল্পভাবে, read_file ফাংশনটি সরাসরি আমাদের প্রোগ্রামে আমদানি করুন:

from cakes import read_file

cake_list = read_file()
print(cake_list)

আমাদের কোড ফিরে আসে:

['Cinnamon Babka', 'Chocolate Cupcake']

আমাদের কোড read_file() চালায় "কেক" মডিউল থেকে ফাংশন। এই উদাহরণে, আমরা সম্পূর্ণ "কেক" মডিউল আমদানি করি। এটি করার পরিবর্তে, আমরা "কেক" মডিউল থেকে একটি ফাংশন আমদানি করি:read_file।

লক্ষ্য করুন যে আমরা যখন read_file আমদানি করি, তখন আমাদের আর cakes.read_file() ব্যবহার করতে হবে না আমাদের ফাংশন কল করতে. আমরা read_file() ব্যবহার করি কারণ আমরা read_file() আমদানি করি সরাসরি আমাদের কোডে কাজ করে।



উপসংহার

একটি পাইথন মডিউলের কোড একটি ভিন্ন ফাইলে বিদ্যমান। মডিউলগুলি থেকে ফাংশন এবং মান আমদানি করার কয়েকটি ভিন্ন উপায় রয়েছে এবং এটি গোলমাল করা সহজ।

আপনি যখন মডিউলগুলির সাথে কাজ করেন, নিশ্চিত করুন যে আপনি সঠিকভাবে অ্যাক্সেস করতে চান এমন ফাংশন, ক্লাস এবং ভেরিয়েবলগুলি উল্লেখ করেছেন। আপনি যদি মডিউলটিকে কল করার পরিবর্তে একটি ফাংশন রেফারেন্স করতে চান তবে আপনি একটি মডিউল থেকে কল করতে চান এমন সঠিক ফাংশনটি নির্দিষ্ট করতে হবে।

এখন আপনি একজন পেশাদার বিকাশকারীর মতো এই পাইথন টাইপইরর সমাধান করতে প্রস্তুত!


  1. TypeError:'undefined' জাভাস্ক্রিপ্টে কোনো বস্তু নয়

  2. কলযোগ্য() পাইথন প্রোগ্রামে

  3. কলযোগ্য() পাইথনে

  4. পাইথনে 'নট ইন' অপারেটর কী করে?