পাইথন একাধিক উত্তরাধিকারের অনুমতি দেয়, পাইথনের প্রতিচ্ছবির উত্তরাধিকারটি দেখতে কেমন?
জাভা এর মতো একক উত্তরাধিকারের ভাষায়, উত্তরাধিকার ব্যবহার করা হত যখন আপনি বলতে পারেন যে একটি বস্তু অন্য বস্তুর "হ'ল একটি" এবং আপনি বস্তুর মধ্যে (প্যারেন্ট অবজেক্ট থেকে শিশু অবজেক্টে) কোড ভাগ করতে চান। উদাহরণস্বরূপ, আপনি বলতে পারেন যে Dogএটি একটি Animal:
public class Animal {...}
public class Dog extends Animal {...}
পাইথন যেহেতু একাধিক উত্তরাধিকারকে সমর্থন করে আমরা অন্যান্য অনেকগুলি বস্তু এক সাথে রচনা করে একটি অবজেক্ট তৈরি করতে পারি। নীচের উদাহরণ বিবেচনা করুন:
class UserService(object):
def validate_credentials(self, username, password):
# validate the user credentials are correct
pass
class LoggingService(object):
def log_error(self, error):
# log an error
pass
class User(UserService, LoggingService):
def __init__(self, username, password):
self.username = username
self.password = password
def authenticate(self):
if not super().validate_credentials(self.username, self.password):
super().log_error('Invalid credentials supplied')
return False
return True
পাইথনে এটি কি একাধিক উত্তরাধিকারের গ্রহণযোগ্য বা ভাল ব্যবহার? উত্তরাধিকার হ'ল পরিবর্তে যখন কোনও বস্তু অন্য বস্তুর "হয়-এ" হয়, তার পরিবর্তে আমরা একটি এবং তৈরির একটি Userমডেল তৈরি করি ।UserServiceLoggingService
ডাটাবেস বা নেটওয়ার্ক ক্রিয়াকলাপের জন্য সমস্ত যুক্তিকে Userমডেল থেকে আলাদা করে রাখা যেতে পারে UserServiceবস্তুটিতে রেখে এবং লগ ইন করার জন্য সমস্ত যুক্তি রেখে LoggingService।
আমি এই পদ্ধতির সাথে কিছু সমস্যা হ'ল:
- এটি কি কোনও Godশ্বরের আপত্তি তৈরি করে? যেহেতু
Userউত্তরাধিকার সূত্রে প্রাপ্ত, বা গঠিত,UserServiceএবংLoggingServiceএটি কি সত্যই একক দায়িত্বের নীতি অনুসরণ করছে? - পিতামাতার / পরবর্তী-ইন-লাইন অবজেক্টে পদ্ধতি অ্যাক্সেস করার জন্য (যেমন,
UserService.validate_credentialsআমাদের ব্যবহার করতেsuperহবে which এটি কোন পদ্ধতিটি এই পদ্ধতিটি পরিচালনা করছে এবং এটি এতটা পরিষ্কার নয় তা বলার জন্য এটি আরও কিছুটা জটিল করে তোলে say , তাত্ক্ষণিকভাবেUserServiceএবং কিছু করার মতোself.user_service.validate_credentials
উপরের কোডটি বাস্তবায়নের পাইথোনিক উপায় কী হবে?