سؤال

في بايثون، هل هناك أي طريقة لإنشاء فصل دراسي، ثم إنشاء نسخة ثانية من تلك الفصل ببيانات متطابقة، ولكن يمكن تغييرها، ثم إعادتها لتكون نفس البيانات الموجودة في الفصل الأصلي؟

لذلك سأقوم بإنشاء فصل دراسي بالأرقام من 1 إلى 5 كبيانات فيه، ثم إنشاء فصل ثانٍ بنفس أسماء الأقسام (أو مشابه جدًا).العبث بالأرقام الموجودة في الفئة الثانية ثم باستخدام دالة واحدة ثم إعادة ضبطها لتكون هي نفسها الموجودة في الفئة الأولى.

البديل الوحيد الذي وجدته هو إنشاء فصل دراسي طويل جدًا يحتوي على عدد كبير جدًا من أجزاء البيانات المنفصلة بحيث لا يمكن استخدامها بسهولة.

هل كانت مفيدة؟

المحلول

الفصل عبارة عن قالب، فهو يسمح لك بإنشاء مخطط، ويمكنك بعد ذلك الحصول على مثيلات متعددة للفئة بأرقام مختلفة، مثل ذلك.

class dog(object):
    def __init__(self, height, width, lenght):
        self.height = height
        self.width = width
        self.length = length

    def revert(self):
        self.height = 1
        self.width = 2
        self.length = 3

dog1 = dog(5, 6, 7)
dog2 = dog(2, 3, 4)

dog1.revert()

نصائح أخرى

إليك إجابة أخرى تشبه إجابة pobk؛يستخدم إملاء المثيل للقيام بعمل حفظ/إعادة تعيين المتغيرات، لكنه لا يتطلب منك تحديد أسمائها في التعليمات البرمجية الخاصة بك.يمكنك استدعاء save() في أي وقت لحفظ حالة المثيل وإعادة تعيين() لإعادة التعيين إلى تلك الحالة.

class MyReset:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.save()

    def save(self):
        self.saved = self.__dict__.copy()

    def reset(self):
        self.__dict__ = self.saved.copy()

a = MyReset(20, 30)
a.x = 50
print a.x
a.reset()
print a.x

لماذا تريد أن تفعل هذا؟قد لا تكون الطريقة الأفضل/الوحيدة.

الطبقات ليس لها قيم.الكائنات تفعل.هل ما تريده هو في الأساس فئة يمكنها إعادة تعيين مثيل (كائن) إلى مجموعة من القيم الافتراضية؟

ماذا عن مجرد توفير طريقة إعادة التعيين، التي تعيد تعيين خصائص الكائن الخاص بك إلى ما هو الافتراضي؟

أعتقد أنه يجب عليك تبسيط سؤالك، أو إخبارنا بما تريد فعله حقًا.الأمر ليس واضحًا على الإطلاق.

أعتقد بأنك محتار.يجب عليك إعادة التحقق من معنى "الفئة" و "المثيل".

أعتقد أنك تحاول أولاً الإعلان عن مثيل لفئة معينة، ثم الإعلان عن مثيل لفئة أخرى، واستخدام البيانات من المثيل الأول، ثم العثور على طريقة لتحويل البيانات في المثيل الثاني واستخدامها على الحالة الأولى...

أوصي باستخدام التحميل الزائد للمشغل لتعيين البيانات.

class ABC(self):
   numbers = [0,1,2,3]

class DEF(ABC):
   def __init__(self):
      self.new_numbers = super(ABC,self).numbers

   def setnums(self, numbers):
      self.new_numbers = numbers

   def getnums(self):
     return self.new_numbers

   def reset(self):
     __init__()

لمعلوماتك فقط، إليك تطبيق بديل...ربما ينتهك حوالي 15 مليون قاعدة بيثونية، لكنني أنشرها حسب المعلومات/الملاحظة:

class Resettable(object):
    base_dict = {}
    def reset(self):
            self.__dict__ = self.__class__.base_dict

    def __init__(self):
            self.__dict__ = self.__class__.base_dict.copy()

class SomeClass(Resettable):
    base_dict = {
            'number_one': 1,
            'number_two': 2,
            'number_three': 3,
            'number_four': 4,
            'number_five': 5,
    }
    def __init__(self):
            Resettable.__init__(self)


p = SomeClass()
p.number_one = 100
print p.number_one
p.reset()
print p.number_one
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top