পাইথন অবজেক্টের ধরণ নির্ধারণ করুন
কোন বস্তুর প্রকারটি নির্ধারণ করুন type
>>> obj = object()
>>> type(obj)
<class 'object'>
যদিও এটি কাজ করে, ডাবল আন্ডারস্কোর বৈশিষ্ট্যগুলি এড়িয়ে চলুন __class__
- এগুলি শব্দার্থগতভাবে প্রকাশ্য নয় এবং সম্ভবত এই ক্ষেত্রে না হলেও বিল্টিন ফাংশনগুলির সাধারণত ভাল আচরণ হয় have
>>> obj.__class__ # avoid this!
<class 'object'>
টাইপ চেকিং
কোনও ভেরিয়েবলের তালিকা, অভিধান বা অন্য কিছু কিনা তা নির্ধারণ করার কোনও সহজ উপায় আছে? আমি একটি বস্তু ফিরে পাচ্ছি যা উভয় প্রকারের হতে পারে এবং আমার পার্থক্যটি বলতে সক্ষম হওয়া প্রয়োজন।
আচ্ছা এটি একটি আলাদা প্রশ্ন, প্রকার - ব্যবহারটি ব্যবহার করবেন না isinstance
:
def foo(obj):
"""given a string with items separated by spaces,
or a list or tuple,
do something sensible
"""
if isinstance(obj, str):
obj = str.split()
return _foo_handles_only_lists_or_tuples(obj)
এটি এমন কেসটিকে কভার করে যেখানে আপনার ব্যবহারকারী সাবক্ল্যাসিং করে চালাক বা বুদ্ধিমান কিছু করতে পারে str
- লিসকভ সাবস্টিটিউশনের নীতি অনুসারে, আপনি আপনার কোডটি ভঙ্গ না করে সাবক্লাস উদাহরণ ব্যবহার করতে সক্ষম হতে চান - এবং এটি isinstance
সমর্থন করে।
বিমূর্ততা ব্যবহার করুন
আরও ভাল, আপনি একটি নির্দিষ্ট বিমূর্ত বেস শ্রেণীর সন্ধান করতে পারেন collections
বা থেকে numbers
:
from collections import Iterable
from numbers import Number
def bar(obj):
"""does something sensible with an iterable of numbers,
or just one number
"""
if isinstance(obj, Number): # make it a 1-tuple
obj = (obj,)
if not isinstance(obj, Iterable):
raise TypeError('obj must be either a number or iterable of numbers')
return _bar_sensible_with_iterable(obj)
বা জাস্ট স্পষ্টভাবে টাইপ-চেক করবেন না
বা, সম্ভবত সর্বোপরি, হাঁস-টাইপিং ব্যবহার করুন এবং স্পষ্টভাবে আপনার কোডটি টাইপ-চেক করবেন না। হাঁস-টাইপিং আরও কমনীয়তা এবং কম শব্দভাজন সঙ্গে লিসকো সাবস্টিটিউশন সমর্থন করে।
def baz(obj):
"""given an obj, a dict (or anything with an .items method)
do something sensible with each key-value pair
"""
for key, value in obj.items():
_baz_something_sensible(key, value)
উপসংহার
- ব্যবহার
type
প্রকৃতপক্ষে একটি উদাহরণের ক্লাস পেতে ।
- ব্যবহার
isinstance
প্রকৃত সাবক্ল্যাস বা রেজিস্টার্ড বিমূর্ততা স্পষ্টভাবে পরীক্ষা করতে ।
- এবং কেবল টাইপ-চেকিং এড়িয়ে চলুন যেখানে এটি বোঝা যায়।