Rumah > Soal Jawab > teks badan
近日在学习python,看的的廖大的python教程,这里有段代码看不懂
主要是getValueOrDefault()
函数 谁给剖析一下?
class Model(dict, metaclass=ModelMetaclass):
def __init__(self, **kw):
super(Model, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Model' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
def getValue(self, key):
return getattr(self, key, None)
def getValueOrDefault(self, key):
value = getattr(self, key, None)
if value is None:
field = self.__mappings__[key]
if field.default is not None:
value = field.default() if callable(field.default) else field.default
logging.debug('using default value for %s: %s' % (key, str(value)))
setattr(self, key, value)
return value
怪我咯2017-04-17 17:31:56
Nampaknya ini adalah kelas asas model pangkalan data, yang mewarisi daripada dict, jadi ia boleh dikatakan sebagai kamus Selain itu, anda boleh melihat __mappings__ dalam ModelMetaclass, yang merupakan pemetaan nama atribut kepada. lajur. Jadi getValueOrDefault mudah difahami Ia adalah untuk mendapatkan nilai atribut tertentu Jika atribut objek belum diberikan nilai, dapatkan nilai lalai lajur yang sepadan. Contohnya, Model berikut mewakili pengguna:
class UserModel(Model):
name = Column(String, default='kyle')
age = Column(Int, default=15)
# 假设我们现在有一个 UserModel 的对象
user = UserModel()
# 以下两种方式是等价的,都是去访问 name 属性,或者说 name 列的值
# 注意:还没有赋值,所以会 AttributeError
user.name
user['name']
# 下面的 getValueOrDefault 则可以返回 name 的默认值 'kyle'
user. getValueOrDefault('name')
Nota: Kod di atas adalah serupa dengan kod pseudo dan tidak boleh dijalankan secara langsung. Ia hanya digunakan untuk penjelasan tambahan.
PHPz2017-04-17 17:31:56
class Model(dict, metaclass=ModelMetaclass):
# 初始化, 没啥好说的
def __init__(self, **kw):
super(Model, self).__init__(**kw)
# 如果取不到值, 报错, 这是一个魔术方法, 使用时直接getattr(obj, key)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Model' object has no attribute '%s'" % key)
# 同魔术方法, 设置一个值, 使用时setattr(obj, key, val)
def __setattr__(self, key, value):
self[key] = value
# 类方法, 获取一个值
def getValue(self, key):
return getattr(self, key, None)
# 类方法, 获取一个值或其默认值
def getValueOrDefault(self, key):
value = getattr(self, key, None)
if value is None:
field = self.__mappings__[key]
if field.default is not None:
value = field.default() if callable(field.default) else field.default
logging.debug('using default value for %s: %s' % (key, str(value)))
setattr(self, key, value)
return value
Jika dua kaedah sihir pertama tidak ditakrifkan, dua kaedah kelas seterusnya tidak akan berfungsi