Discuss / Python / __slots__ 的 个人小发现

__slots__ 的 个人小发现

Topic source

Solitaryhon丶

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

同问JX锦侠问题 

Student.set_gender = set_gender

Student.set_gender =Method Type(set_gender, Student)

的区别

#7 实验了一下

Stu.set_age=MethodType(set_age,Student)

是错误的,属性也要绑定在类上才行

Student.set_age=MethodType(set_age,Student)

针对楼主方法二 大家可以尝试一下以下代码 不会报错

from types import MethodType

class Student(object):

    __slots__=('name','age','set_score')

# 用tuple表示允许绑定的属性名称

s=Student()

s.name='liyanda'

s.age=21

try:

    s.score=15

except AttributeError as e:

    print("AttributeError",e)

def set_score(self,score): 

self.score=score

s.set_score=MethodType(set_score,s)

Student.set_score = set_score并不是给类绑定了方法,只是属于调用,而Student.set_score=MethodType(set_score,Student)才是给类绑定方法

1、Student.set_score=set_score

print(Student.set_score,set_score)

2、Student.set_score=MethodType(set_score,Student)

print(Student.set_score,set_score)

分别运行上面两段代码就能体会到区别


  • 1
  • 2

Reply