问题描述
我想知道如何为带有class FetchWording: ObservableObject {
func fetch (pID: String) -> String {
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Translation")
fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [nspredicate(format: "id == %@",pID as CVararg),nspredicate(format: "language == %@",sdisplayLanguage as CVararg)])
fetchRequest.fetchLimit = 1
do {
let fetchWording = try ContentView().managedobjectContext.fetch(fetchRequest)
print (fetchWording[0])
} catch {
print ("Error")
}
return (“See you later when it’s working”)
}
}
的类实现__repr__
方法。据我了解__slots__
,它应该返回一个字符串,该字符串可用于构造我们称为__repr__
的对象。换句话说,将__repr__
赋予Python解释器应构造repr(object)
。
但是,如果有一个具有object
的类,我很难想象如何实现这一点。这是因为使用__slots__
时,插槽中的某些属性可能会初始化并具有值,而其他属性可能不会。那么,如何确定初始化了哪些属性以及将它们传递到__slots__
字符串的值?
此类的最小示例:
__repr__
有什么建议吗?
解决方法
据我了解,
__repr__
应该返回一个字符串,该字符串可用于构造我们称为__repr__
的对象。换句话说,将repr(object)
赋予Python解释器应构造对象。
这只是一个建议,而不是强加于人:
如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(在适当的环境下)。如果无法做到这一点,则应返回格式为<...>的字符串。
“如果可能的话”的解释非常松散和微弱,许多对象根本不会打扰,例如类或函数的表示形式可以产生其源表示形式,但不会,因为它的用例很少,而且烦人的比有用的。
但是,如果有一个具有
__slots__
的类,我很难想象如何实现这一点。这是因为使用__slots__
时,插槽中的某些属性可能会被初始化并具有值,而其他属性可能不会。
当然不是。我从来没有写过带有插槽的课程,在该课程中并非所有时间都被填满。另外,hasattr
/ getattr
在插槽中也可以正常工作。
尽管我不得不问:您是在从事{@ {1}}的货运培训吗?有人曾经告诉过您使用插槽,现在您到处都在使用它们吗?
插槽是一种内存优化工具,例如,重点是每个成员仅需要一个指针(加上一些对象开销),而不是dict实例(及其摊销的重新分配)的开销。当您通常不使用插槽时,使用插槽几乎没有意义,而在插槽中添加__slots__
则毫无意义。
更不用说最近的Python 3迭代为实例指令增加了各种优化,至少在属性数量增加的情况下,使插槽变得更没用了(在3.6以上的相当大的类上,我们发现相差不到5%,尽管小班学习还是很有意义的。)