چرا در پایتون در زمان اجرا می توانیم متغیر به آبجکت اضافه کنیم؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا در پایتون در زمان اجرا می توانیم متغیر به آبجکت اضافه کنیم؟

0 امتیاز

چرا در پایتون در زمان اجرا می توانیم متغیر به آبجکت اضافه کنیم؟ کد زیر رو ببنید. اجرا میشه و یه متغیر به آبجکت اضافه میشه

class A:
    def __init__(self):
        pass

a = A()
a.a = 0
print(a.a)

حالا سوال اینجاست:

1- چرا اجازه این کارو داریم؟

2- چطور میتونیم کاری کنیم که کلاینت این اجازه رو نداشته باشه؟

سوال شده تیر 9, 1399  بوسیله ی miladhzz (امتیاز 12)   1 3

1 پاسخ

0 امتیاز
 
بهترین پاسخ

در این مواقع  کلاس مورد نظر را فریز کنید تا خارج از کانستراکتور نشه متغیر عضو به نمونه اضافه کرد به صورت زیر:

class FrozenClass(object):
    __isfrozen = False
    def __setattr__(self, key, value):
        if self.__isfrozen and not hasattr(self, key):
            raise TypeError( "%r is a frozen class" % self )
        object.__setattr__(self, key, value)

    def _freeze(self):
        self.__isfrozen = True

class Test(FrozenClass):
    def __init__(self):
        self.x = 42#
        self.y = 2**3

        self._freeze() # no new attributes after this point.

a,b = Test(), Test()
a.x = 10
b.z = 10 # fails

 

پاسخ داده شده تیر 9, 1399 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد تیر 10, 1399 بوسیله ی miladhzz
یه جا خوندم که میشه از پایتون 3.3 به بعد از __slots__ استفاده کرد. نظر شما چیه؟
...