Discuss / Python / 关于__slots__的发现

关于__slots__的发现

Topic source

金钟铉

#1 Created at ... [Delete] [Delete and Lock User]

1、类内,类的方法不能和限制的名同名

2、类外,若实例和类要使用限制的名,实例必须在前,否则报错

3、类外,若实例和类要使用限制的名,类会覆盖实例的属性和方法

from types import MethodType
class a(object):
    __slots__="b"
    '''def b():
        pass     
       b=0''' #方法属性都报错

def c():
    pass
d=a()

'''d.b=1
a.b=2
print(d.b,a.b)''' #d的b属性变成2了

'''d.b=c
print(d.b())
a.b=c
#print(d.b())     #d的b方法变成类方法传了d进去,报错
print(a.b())'''

def e(self,f):
    self.b=f
    return self.b

d.b=MethodType(e,d)
d.b(3)
print(d.b)
a.b=MethodType(e,a)
d.b(4)#d的b方法变成类方法,给a.b赋值改变了d.b的值
print(d.b,a.b)

  • 1

Reply