python 在类中声明了__slots__ 如何实现__get__ 和 __set__的对象属性封装,或者其他的方法是什么?
PHPz
PHPz 2017-04-17 11:50:46
0
1
345

在类中声明slots后,有要在类中控制对象类型的定义,如何来实现这个功能?
比如:

class T(object):
    __slots__=('a','b')
    a=TypeObject()
    b=TypeObject()
    def __init__(self,a,b):
        self.a=a
        self.b=b
TypeObject(object):
    def __init__(self,):
        self.value=0
    def __set__(self,instance,value):
        pass
    def __get__(self,instance,owner):
        pass

我在这里想控制a,b的对象类型,但是我在定义TypeObject类的时候发现声明了slots并不能够很好的控制类,由于数据量很大,slots是为了解决内存和性能方面的问题。
这样类中的对象类型就变成了tuple类型,如何来实现这样的对象数据封装?
应该怎么定义TypeObject类?
这里就是我想控制a,和b的类型,比如说定义成int,能不能为空,default等。
我应该如何实现TypeObject对象类型,还是分别在每个类中都封装成@property进行控制。

PHPz
PHPz

学习是最好的投资!

全部回覆(1)
巴扎黑

用__get__,__set__中,定義了__slots__並不能控制instance新增新的屬性了,類別中的__dict__屬性控制會變成tuple。
可以定義@propety 實作屬性物件的封裝。這樣會造成代碼的臃腫。
不知道能不能定義元類別來實現。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!