আমি খুঁজে পেয়েছি যে নিম্নলিখিত দুটি কাজ:
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
সমস্ত পাইথন ক্লাসে কি বস্তু বাড়ানো উচিত? অবজেক্ট অব অবজেক্টে কোনও সম্ভাব্য সমস্যা আছে কি?
আমি খুঁজে পেয়েছি যে নিম্নলিখিত দুটি কাজ:
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
সমস্ত পাইথন ক্লাসে কি বস্তু বাড়ানো উচিত? অবজেক্ট অব অবজেক্টে কোনও সম্ভাব্য সমস্যা আছে কি?
উত্তর:
পাইথন 2-এ উত্তরাধিকার সূত্রে প্রাপ্ত না হওয়ায় object
একটি পুরানো শৈলীর শ্রেণি তৈরি হবে, যা অন্যান্য প্রভাবগুলির মধ্যেও type
বিভিন্ন ফলাফল দেয়:
>>> class Foo: pass
...
>>> type(Foo())
<type 'instance'>
বনাম
>>> class Bar(object): pass
...
>>> type(Bar())
<class '__main__.Bar'>
এছাড়াও একাধিক উত্তরাধিকার জন্য নিয়ম আছে বিভিন্ন উপায়ে যে আমি এমনকি এখানে সংক্ষেপ করার চেষ্টা করা হবে না। এমআই সম্পর্কে আমি যে সমস্ত ভাল ডকুমেন্টেশন দেখেছি তা নতুন স্টাইলের ক্লাসগুলিকে বর্ণনা করে।
অবশেষে, পুরানো স্টাইলের ক্লাসগুলি পাইথন 3 এ অদৃশ্য হয়ে গেছে এবং এর উত্তরাধিকার অন্তর্ভুক্ত হয়ে object
গেছে। সুতরাং, পুরানো সফ্টওয়্যারটির সাথে আপনার পশ্চাদপটে কমপ্যাট না লাগলে সর্বদা নতুন স্টাইলের ক্লাসগুলি পছন্দ করুন।
পাইথন 3-এ, object
আপনি নিজেরাই বলছেন বা না বলুন , ক্লাসগুলি সুস্পষ্টভাবে প্রসারিত হয়েছে ।
পাইথন 2 এ, পুরানো-শৈলীর এবং নতুন-শৈলীর ক্লাস রয়েছে। কোনও শ্রেণিকে সিগন্যাল করতে নতুন-স্টাইল হয়, আপনাকে এখান থেকে স্পষ্টতই উত্তরাধিকার সূত্রে উত্তীর্ণ হতে হবে object
। যদি তা না হয় তবে পুরানো শৈলীর প্রয়োগ ব্যবহার করা হয়।
আপনি সাধারণত একটি নতুন-স্টাইলের ক্লাস চান। object
স্পষ্টতই উত্তরাধিকারী । দ্রষ্টব্য যে এটি পাইথন 3 কোডের ক্ষেত্রেও প্রযোজ্য যা লক্ষ্য পাইথন 2 এর সাথে সামঞ্জস্যপূর্ণ হতে পারে।
অজগর 3 এ আপনি তিনটি বিভিন্ন উপায়ে একটি শ্রেণী তৈরি করতে পারেন এবং অভ্যন্তরীণভাবে তারা সব সমান (উদাহরণ দেখুন)। আপনি কীভাবে একটি ক্লাস তৈরি করেন তা বিবেচ্য নয়, অজগর 3 এর সমস্ত ক্লাস অবজেক্ট নামে বিশেষ শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত । ক্লাস অবজেক্টটি পাইথনের মৌলিক শ্রেণি এবং ডাবল-আন্ডারস্কোর পদ্ধতি, বর্ণনাকারী, সুপার () পদ্ধতি, সম্পত্তি () পদ্ধতি ইত্যাদির মতো প্রচুর কার্যকারিতা সরবরাহ করে
উদাহরণ 1।
class MyClass:
pass
উদাহরণ 2।
class MyClass():
pass
উদাহরণ 3।
class MyClass(object):
pass
object
অন্তর্নির্মিত রেফারেন্স দেয় object
। যদি আমাদের অবশ্যই সিপিথনের অন্তর্নির্মিত শনাক্তকারী প্রতিস্থাপন করা যায় তা বিবেচনা করা উচিত আমরা ডেটা মডেল সম্পর্কে সবেমাত্র কিছু দৃ .়তার সাথে বলতে পারি। এটি কি গুরুত্ব সহকারে যুক্তিযুক্ত হতে পারে যে str
একটি যুক্তি হিসাবে সর্বদা একটি স্ট্রিংকে আর্গুমেন্ট হিসাবে গ্রহণ করে না builtins.str = None
?
হ্যাঁ, সমস্ত পাইথন ক্লাসের অবজেক্ট (বা বরং সাবক্লাস, এটি এখানে পাইথন) প্রসারিত করা উচিত। যদিও সাধারণত কোনও গুরুতর সমস্যা দেখা দেয় না, কিছু ক্ষেত্রে (একাধিক উত্তরাধিকারী গাছের মতো) এটি গুরুত্বপূর্ণ হবে। এটি পাইথন 3 এর সাথে আরও ভাল সামঞ্জস্যতা নিশ্চিত করে।
অন্যান্য উত্তরগুলি কভার হিসাবে, পাইথন 3 বস্তু থেকে উত্তরাধিকার অন্তর্ভুক্ত। তবে আপনার কী করা উচিত এবং কনভেনশন কী তা তারা জানায় না।
পাইথন 3 ডকুমেন্টেশনের উদাহরণগুলিতে সমস্ত নীচের স্টাইলটি ব্যবহার করে যা কনভেনশন হয়, তাই আমি আপনাকে পাইথন 3 এর ভবিষ্যতের যে কোনও কোডের জন্য এটি অনুসরণ করার পরামর্শ দিই।
class Foo:
pass
সূত্র: https://docs.python.org/3/tutorial/class.html#class-objects
উদাহরণ উদ্ধৃতি:
শ্রেণীর অবজেক্ট দুটি ধরণের ক্রিয়াকলাপ সমর্থন করে: গুণাবলী উল্লেখ এবং তাত্ক্ষণিক।
অ্যাট্রিবিউট রেফারেন্সগুলি পাইথনের সমস্ত অ্যাট্রিবিউট রেফারেন্সের জন্য ব্যবহৃত স্ট্যান্ডার্ড সিনট্যাক্স ব্যবহার করে: obj.name। শ্রেণীর অবজেক্ট তৈরি হওয়ার সময় বৈধ বৈশিষ্ট্যের নামগুলি সমস্ত নাম যা শ্রেণীর নামস্থানে ছিল in সুতরাং, ক্লাস সংজ্ঞাটি যদি এরকম দেখায়:
class MyClass: """A simple example class""" i = 12345 def f(self): return 'hello world'
আরেকটি উক্তি:
সাধারণভাবে বলতে গেলে, দৃষ্টান্তের ভেরিয়েবলগুলি প্রতিটি উদাহরণের জন্য স্বতন্ত্র ডেটার জন্য এবং শ্রেণি ভেরিয়েবলগুলি শ্রেণীর সমস্ত উদাহরণগুলির দ্বারা ভাগ করা বৈশিষ্ট্য এবং পদ্ধতিগুলির জন্য:
class Dog: kind = 'canine' # class variable shared by all instances def __init__(self, name): self.name = name # instance variable unique to each instance
পাইথন 3-তে কোনও পার্থক্য নেই, তবে পাইথন 2-তে প্রসারিত না করা object
আপনাকে একটি পুরানো স্টাইলের ক্লাস দেয়; আপনি একটি পুরানো স্টাইলের ক্লাসের চেয়ে একটি নতুন-স্টাইলের ক্লাস ব্যবহার করতে চান।
class Foo():
এবংclass Foo:
? আমি পাইথন মান্য হিসেবে কাজ উভয় 3.