পরামিতি হিসাবে অবজেক্ট সহ ক্লাস


114

আমি কিছু পাইথন কোড স্কেল কোডে অনুবাদ করার চেষ্টা করছি। সুতরাং আমি পাইথন মোট নবু।

তবে কিছু শ্রেণীর কেন প্যারামিটার হিসাবে বস্তু রয়েছে তবে তা কখনই স্পষ্টভাবে ব্যবহার করে না? এটি প্রথম স্থানে প্যারামিটার হিসাবে রাখার যুক্তি কী?

উদাহরণ:

class Table(object)

সময় দেয়ার জন্য ধন্যবাদ.


উত্তর:


112

পাইথন 2 এ Tableএটি একটি নতুন ধাঁচের শ্রেণি হিসাবে ঘোষণা করেছে ("ক্লাসিক" শ্রেণীর বিপরীতে)। পাইথন 3 এ সমস্ত ক্লাসগুলি নতুন-স্টাইলের ক্লাস হয়, সুতরাং এটি আর প্রয়োজন হয় না।

নতুন স্টাইলের ক্লাসে কয়েকটি বিশেষ গুণ রয়েছে যা ক্লাসিক ক্লাসগুলির অভাব রয়েছে।

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

এছাড়াও, বৈশিষ্ট্য এবং সুপার ক্লাসিক ক্লাসগুলির সাথে কাজ করে না।

পাইথন 2 এ সমস্ত ক্লাসকে নতুন স্টাইলের ক্লাস করা ভাল ধারণা। (যদিও স্ট্যান্ডার্ড লাইব্রেরিতে প্রচুর ক্লাসগুলি পশ্চাদপদ-সামঞ্জস্যের জন্য এখনও ক্লাসিক ক্লাস।

সাধারণভাবে, যেমন একটি বিবৃতিতে

class Foo(Base1, Base2):

Fooবেস ক্লাস Base1এবং উত্তরাধিকার সূত্রে প্রাপ্ত বর্গ হিসাবে ঘোষণা করা হচ্ছে Base2

objectপাইথনের সকল শ্রেণির জননী। এটি একটি নতুন স্টাইলের ক্লাস হয় থেকে inheriting objectতোলে Tableএকটি নতুন স্টাইলের বর্গ।


আপনি কি আমাকে এমন উত্সে পুনর্নির্দেশ করতে পারেন যে পাইথন 3-তে প্যারামিটার হিসাবে অবজেক্টের প্রয়োজন নেই? আমি এটি খুঁজে পেতে পারে না। আপনাকে ধন্যবাদ
স্নো

1
স্ট্যাকওভারফ্লোতে এটি উদাহরণস্বরূপ বলা হয়েছে ( উদাহরণস্বরূপ, এখানে ) তবে আমি ডক্সে এর কোনও সাধারণ ঘোষণা খুঁজে পাইনি। টিউটোরিয়ালে এটি স্পষ্টভাবে দেখানো হয়েছে ( objectশ্রেণীর ঘাঁটিগুলির তালিকা থেকে বাদ দিয়ে ) ।
unutbu

1
Python3 ডক্স রাজ্যের যে একটি "নতুন স্টাইলের বর্গ" "ক্লাস গন্ধ ধরে পুরানো নাম এখন সব শ্রেণী বস্তু জন্য ব্যবহৃত (আমার জোর)"। এবং পাইথন 2 ডক্স জানিয়েছে যে "নতুন ধাঁচের শ্রেণি" হ'ল যে শ্রেণিটি উত্তরাধিকার সূত্রে প্রাপ্ত object। দুটি বিবৃতি একত্রিত করে বোঝায় যে objectপাইথন 3-তে ক্লাস বেসগুলির তালিকায় আপনাকে অন্তর্ভুক্ত করার দরকার নেই যেহেতু সমস্ত ক্লাস পাইথন 3-এ নতুন-স্টাইলের ক্লাস।
unutbu

21

Tableবর্গ নামক একটি বর্গ ব্যাপ্ত হয় object। এটা কোন যুক্তি নয়। আপনি যে কারণে objectস্পষ্টভাবে প্রসারিত করতে চাইতে পারেন তা হ'ল এটি ক্লাসটিকে একটি নতুন শৈলীর শ্রেণিতে পরিণত করে। objectপাইথন 3 অবধি আপনি যদি স্পষ্টভাবে এটি প্রসারিত না করে নির্দিষ্ট না করেন তবে এটি পুরানো শৈলীর শ্রেণি হিসাবে ডিফল্ট হবে। (পাইথন 3 থেকে, সমস্ত শ্রেণিগুলি নতুন ধাঁচের, আপনি স্পষ্টতই প্রসারিত করুন objectবা না করুন।)

নতুন ধাঁচের এবং পুরাতন স্টাইলের ক্লাসগুলির বিষয়ে আরও তথ্যের জন্য, দয়া করে এই প্রশ্নটি দেখুন


1
এটি আরও সোজা এবং সংক্ষিপ্ত উত্তর। ধন্যবাদ।
সবুঙ্কু

3

কেবল একটি নোট যে "নতুন-স্টাইল" বনাম "পুরাতন-শৈলী" শ্রেণীর পার্থক্য পাইথন ২.x এর সাথে নির্দিষ্ট; 3.x তে সমস্ত শ্রেণি "নতুন-স্টাইল"।


2

ক্লাস টেবিল এবং ক্লাস টেবিল (অবজেক্ট) পাইথনের জন্য আলাদা নয়।

এটি কোনও প্যারামিটার নয়, এর অবজেক্ট থেকে প্রসারিত (যা অন্যান্য অনেক ভাষার মতো বেস ক্লাস)।

কেবল এটিই বলে যে এটি "অবজেক্ট" এ সংজ্ঞায়িত যা কিছু উত্তরাধিকার সূত্রে প্রাপ্ত। এটি ডিফল্ট আচরণ।


3
স্বয়ংক্রিয়ভাবে প্রসারিত ক্লাসগুলি objectকেবল পাইথন 3 এ ডিফল্ট আচরণ। পাইথন 2-তে, একটি বর্ধনকারী অবজেক্টের বৈশিষ্ট্য রয়েছে যে কোনও শ্রেণীর অবজেক্টটি প্রসারিত করে না সেগুলি থাকবে না।
লুইস এলিস

1

অজগরটি পাইথনে সংজ্ঞায়িত শ্রেণি অবজেক্টের সর্বাধিক বেস ধরণের। অবজেক্টের বৈশিষ্ট্যগুলি নীচে হিসাবে দেখা যায়

** >>> দির (অবজেক্ট)

[' শ্রেণি ', ' delattr ', ' ডক ', ' বিন্যাস ', ' getattribute ', ' হ্যাশ ', ' Init ', ' নতুন ', ' কমাতে ', ' reduce_ex ', ' repr ', ' setattr ', ' মাপ ',' টিআর ',' সাবক্লাসহুক '] **

সুতরাং টেবিল (অবজেক্ট) কেবল উত্তরাধিকার!।


0

1) শ্রেণীর নাম (অবজেক্ট): 2) শ্রেণীর নাম: তারা উভয়ই একই তবে লেখার দিক থেকে প্রথমে একটি আরও ভাল, অন্য শ্রেণীর সাথে অন্য শ্রেণিতে উত্তরাধিকার সূত্রে এটি আরও ভাল দেখায়, এটি সমজাতীয় দেখায়।

কি একই? সুতরাং, পাইথনের প্রতিটি জিনিস অবজেক্টের আওতায় আসে মানে পাইথনের প্রতিটি জিনিসের অবজেক্টের সম্পত্তি থাকে, যদি লিখুন বা না লিখুন এটি বুঝতে পারবেন। প্রথমে আমরা স্পষ্টভাবে দ্বিতীয়টি বলি আমরা তা করি নি।


পাইথন 2 এ এটি নয়, বিশদটির জন্য গৃহীত উত্তর দেখুন।
নেম্মি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.