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 ...