অজগরে একটি ক্লাস কিভাবে বাড়ানো যায়?


92

পাইথনে আপনি কীভাবে একটি ক্লাস বাড়িয়ে দিতে পারেন? উদাহরণস্বরূপ যদি আমার কাছে থাকে

color.py

class Color:
    def __init__(self, color):
        self.color = color
    def getcolor(self):
        return self.color

color_extended.py

import Color

class Color:
    def getcolor(self):
        return self.color + " extended!"

তবে এটি কাজ করে না ... আমি প্রত্যাশা করি যে আমি যদি কাজ করি তবে আমি color_extended.pyযখন রঙিন বস্তু তৈরি করি এবং getcolorফাংশনটি ব্যবহার করি তখন এটি স্ট্রিং দিয়ে "প্রসারিত!" শেষে. এছাড়াও এটি আমদানি থেকে শুরু করা উচিত ছিল।

অজগর ধরুন ৩.১

ধন্যবাদ


4
আপনি কি ডকুমেন্টেশন পড়ার চেষ্টা করেছিলেন? docs.python.org/2.7/tutorial/classes.html#inheritance
wRAR

ক্লাসগুলির প্রথম বর্ণের মূলধন হওয়া উচিত ("রঙ" "রঙ" নয়;);)
ডেভনকোড

14
@WRAR হতে পারে 2013 এ এটি একটি যুক্তিসঙ্গত প্রশ্ন, তবে আসুন সত্য কথা বলা যাক - লোকেরা প্রথমে স্ট্যাকওভারফ্লোতে ফিরে আসে, সুতরাং এটির পক্ষে রাখা ভাল প্রশ্ন। এই প্রশ্নটি "পাইথন প্রসারিত শ্রেণীর" জন্য প্রথম গুগল হিট, ডকুমেন্টেশন তৃতীয় is
টিসি প্রক্টর

উত্তর:


94

ব্যবহার:

import color

class Color(color.Color):
    ...

যদি এটি পাইথন 2.x ছিল, এছাড়াও আপনি আহরণ করতে চান color.Colorথেকে object, এটি একটি করতে নতুন স্টাইলের বর্গ :

class Color(object):
    ...

পাইথন 3.x এ এটি প্রয়োজনীয় নয়।


31
এটি লক্ষণীয় যে আপনি নতুন শ্রেণিকে পুরানোটির মতো একই নাম দিতে পারবেন: class color(color):একটি নতুন শ্রেণি সংজ্ঞায়িত করে যা পুরানোটিকে প্রতিস্থাপন করে তবে এটি থেকে প্রাপ্ত। (এই কি ওপি করার চেষ্টা করা হয় বলে মনে হয়।)
kindall

17
class extended_color(color):খারাপ মানের সাধারণত - class ExtendedColor(Color):ক্লাসের জন্য হওয়া উচিত। সবেমাত্র একটি নিটপিক
অত্যাচারী ওয়েভ

এখানে নুব প্রশ্ন: আপনি কেন ব্যবহার করলেন না __init__?
মানসিকবিদ

0

ক্লাসগুলি প্রসারিত করার বিশেষ উপায় (বিশেষত অর্থ, নতুন পদ্ধতি যুক্ত করা, বিদ্যমানগুলি পরিবর্তন না করা), এমনকি অন্তর্নির্মিত, হ'ল একটি প্রিপ্রসেসর ব্যবহার করা যা পাইথনের খণ্ডের বাইরে / উপরে প্রসারিত করার ক্ষমতা যুক্ত করে এক্সটেনশানটিকে রূপান্তরিত করে পাইথনের আগে পাইথন সিনট্যাক্স আসলে এটি দেখতে পায় to

আমি পাইথন 2 এর str()ক্লাসটি বাড়ানোর জন্য এটি করেছি extend str()একটি বিশেষ আকর্ষণীয় লক্ষ্য কারণ হিসাবে উদ্ধৃত ডেটার সাথে অন্তর্ভুক্ত লিঙ্কেজ 'this'এবং 'that'

এখানে কিছু প্রসারিত কোড রয়েছে, যেখানে কেবলমাত্র যুক্ত অ-পাইথন বাক্য গঠনটি হ'ল extend:testDottedQuadবিট:

extend:testDottedQuad
def testDottedQuad(strObject):
    if not isinstance(strObject, basestring): return False
    listStrings = strObject.split('.')
    if len(listStrings) != 4: return False
    for strNum in listStrings:
        try:    val = int(strNum)
        except: return False
        if val < 0: return False
        if val > 255: return False
    return True

যার পরে আমি প্রিপ্রোসেসরকে খাওয়ানো কোডটিতে লিখতে পারি:

if '192.168.1.100'.testDottedQuad():
    doSomething()

dq = '216.126.621.5'
if not dq.testDottedQuad():
    throwWarning();

dqt = ''.join(['127','.','0','.','0','.','1']).testDottedQuad()
if dqt:
    print 'well, that was fun'

প্রিপ্রোসেসর এটি খায়, বানরপ্যাচিং ছাড়াই সাধারণ পাইথনকে ছিটকে দেয় এবং পাইথন যা করতে ইচ্ছা করেছিল তা করে।

এসি প্রিপ্রোসেসর যেমন সি তে কার্যকারিতা যুক্ত করে, তেমনই পাইথন প্রিপ্রোসেসর পাইথনে কার্যকারিতা যুক্ত করতে পারে।

আমার প্রিপ্রসেসর বাস্তবায়ন একটি স্ট্যাক ওভারফ্লো উত্তরের জন্য খুব বড়, তবে যারা আগ্রহী হতে পারে তাদের জন্য এটি এখানে গিটহাবে রয়েছে।

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