python中槽是什么_使用带插槽的Python描述符

尽管值不确定,但如果可以将第一个__slots__放入子类中,以下技巧将起作用。在class A( object ):

__slots__ = ( 'a', )

class B( A ):

__slots__ = ()

@property

def a( self ):

try:

return A.a.__get__( self )

except AttributeError:

return 'no a set'

@a.setter

def a( self, val ):

A.a.__set__( self, val )

(您可以使用自己的描述符而不是属性。)对于以下定义:

^{pr2}$

据我所知,__slots__是用它自己的描述符实现的,因此在同一个类中__slots__后面的另一个描述符将被覆盖。如果您想详细说明这项技术,可以在self.__class__.__mro__中搜索候选描述符(或者在您自己的__get__中从instance开始)。在

附言

好吧。。。如果你真的想使用一个类,你可以使用以下改编:class C( object ):

__slots__ = ( 'c', )

class MyDescriptor( object ):

def __init__( self, slots_descriptor ):

self.slots_descriptor = slots_descriptor

def __get__( self, inst, owner = None ):

try:

return self.slots_descriptor.__get__( inst, owner )

except AttributeError:

return 'no c'

def __set__( self, inst, val ):

self.slots_descriptor.__set__( inst, val )

C.c = MyDescriptor( C.c )

如果您坚持不可测性,您可以在元类或类装饰器中进行赋值。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值