python 用描述符對例項屬性做型別檢查

2021-08-26 20:39:03 字數 1289 閱讀 9899

class

t:pass

t = t()

t.__dict__['x'] = 'ooo'

#等價於 t.x = 'ooo', 新增例項屬性x

print(t.x)

******************************=

oooclass

attr:

def__init__

(self, key, type_):

self.key = key

self.type_ = type_

def__set__

(self, instance, value):

# instance是傳進來的person例項 value是設定的值

print('in __set__')

ifnot isinstance(value, self.type_):

raise typeerror('must be %s' % self.type_)

instance.__dict__[self.key] = value

def__get__

(self, instance, cls):

#cls是傳進來的person類

print('in __get__', instance, cls)

return instance.__dict__[self.key]

def__delete__

(self, instance):

print('in __del__', instance)

del instance.__dict__[self.key]

class

person:

# 這個name是類屬性,但是由於沒有設定例項屬性,

# 它會往上查詢到name,

# 但實際上是建立了例項屬性 self.name的,

# 因為attr裡面instance.__dict__[self.key] = value,這個是新增例項屬性的

name = attr('name', str)

age = attr('age', int)

# def __init__(self):

# self.name = attr('name', str)

# self.age = attr('age', int)

p = person()

p.name = 'ssso'

p.age = 32

#print(person.name)

屬性描述符

在es5開始,所有屬性都具備了屬性描述符。我們可以通過object.getownpropertydescriptor來觀察到屬性的描述符,它是長這樣子的。object.getownpropertydescriptor a writable決定該屬性是否唯讀。enumerable決定該屬性是否可列舉。...

屬性描述符

property descriptor 屬性描述符 是乙個普通物件,用於描述乙個屬性的相關資訊 通過object.getownpropertydescriptor 物件,屬性名 可以得到乙個物件的某個屬性的屬性描述符 object.getownpropertydescriptors 物件 可以得到某...

物件屬性描述符

從 es5 開始,物件的屬性都具備了屬性的描述符,它能設定屬性的特性。我們可以使用 object.defineproperty 來新增或者配置乙個屬性並對它的特性進行配置。屬性有 writable enumerable 和 configurable 這三個或之一都為屬性描述符。一.writable ...