- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
此处,“OK”当然意味着 AYOR(风险由您自己承担),但如果避免与现有属性名称发生明显冲突,则不会出现可预见的问题。
Skyfield物体——尤其是行星——通常具有有限数量的属性。我经常编写简短的脚本来提取数字数据,并将其保存为文本并稍后使用。 这些本质上是“一次性”脚本,因为我很少使用它们超过一次或两次,并且从不共享它们。
当我编写更持久的代码时,我当然会创建自己的容器对象。
我的问题:它似乎对我来说效果很好,所以在这个特定上下文中,除了属性冲突之外,还有什么可能出错的地方吗?名字?
from skyfield.api import load
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
eph = load('de421.bsp')
earth = eph['earth']
sun = eph['sun']
ts = load.timescale()
t = ts.utc(2016, 1, np.linspace(0, 366, 1000))
# SLOPPY WAY: just add them directly
earth.pos = earth.at(t).position.km
sun.pos = sun.at(t).position.km
earth.r = np.sqrt(((earth.pos-sun.pos)**2).sum(axis=0))
earth.peri = earth.r.min()
earth.apo = earth.r.max()
print earth.peri, earth.apo, earth.pos.shape
# BETTER WAY: tedious but more cautious
uhoh = dict()
ep = earth.at(t).position.km
sp = sun.at(t).position.km
r = np.sqrt(((ep-sp)**2).sum(axis=0))
uhoh['pos'] = ep
uhoh['r'] = r
uhoh['peri'] = r.min()
uhoh['apo'] = r.max()
earth.uhoh = uhoh
print earth.uhoh['peri'], earth.uhoh['apo'], earth.uhoh['pos'].shape
返回:
147100175.99 152103762.948 (3, 1000)
147100175.99 152103762.948 (3, 1000)
最佳答案
这确实是一种在非正式 Python 代码中偶尔会遇到的模式。除了 future 的属性名称冲突之外,另一个可能出错的主要问题是库作者在想要更有效地创建数百万个对象的人们的怂恿下添加了 __slots__
规范,并且当您尝试添加其他属性时开始收到错误。
防御__slots__
如果出现的话,就是使用您想要使用的类的自己的子类。如果子类未能指定 __slots__
也是——至少说__slots__ = []
即使它没有更多想要添加的属性 - 那么子类的实例是完全开放的并且可以具有任何属性,因此您始终可以创建自己的子类来“解锁”实例并让它们具有任何属性。
请注意,像 earth
这样的对象有资格成为字典键,因此如果您有一条想要与每个行星关联的信息,您可以这样说:
positions = {}
positions[earth] = ...
当您需要记住一组对象中的每个对象的额外信息时,这是一种常见模式。
关于python - 是不是 "OK"才开始给Skyfield对象添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37070803/
此处,“OK”当然意味着 AYOR(风险由您自己承担),但如果避免与现有属性名称发生明显冲突,则不会出现可预见的问题。 Skyfield物体——尤其是行星——通常具有有限数量的属性。我经常编写简短的脚
我们有一个(假设)将在 1-2 年内完成的项目。到那时,JDK7(希望还有 Java7 JCP 规范)应该准备就绪。 但是,我想知道,甲骨文做出“愚蠢”决定的“危险”有多大,这会使 JDK7 成为一个
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
要知道,haswell是英特尔作为Ivy Bridge微架构的“第四代核心”继承者而开发的一种处理器微架构的代号。 1英特尔正式发布了基于这种微架构的CPU... More 但是,我想知道如何通过在
修改 setter 参数是否正常?假设我们有 setString 方法。我们真的想保留字符串的修剪形式。所以带有尾随空格的字符串是无效的,但我们不想抛出异常。 最好的解决办法是什么?修剪 setter
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我写了一段代码,然后编译它没有错误。但是当我运行时,它会引发异常(java.lang.NoClassDefFoundError: TesKt$test$1$1)。 这是语言错误吗? private f
这道题是从算法导论的习题23.1-7演化而来的。 原问题是: 23.1-7争论如果一个图的所有边权重都是正的,那么连接所有顶点并且具有最小总权重的边的任何子集必须是一棵树。举例说明,如果我们允许某些权
假设我创建了一个 lambda 实例,稍后我想查询该对象以查看它是 proc 还是 lambda。如何做到这一点? .class() 方法不起作用。 irb(main):001:0> k = lamb
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
所以我正在将我的一个程序移植到一个新的游戏机上。问题是用于编译我的 c++ 应用程序的 SDK 不支持 __int16,但它支持 int16_t。使用 int16_t 代替 __int16 是否“安全
我最近偷看了 Url.IsLocalUrl() 方法的实现,该方法被广泛使用并被推荐为用于防止重定向攻击的措施之一。我惊讶地发现,如果我要为我的应用程序中的 Controller 的其中一个操作提供完
我读了这篇好文章 Angular onPush Change Detection Strategy 在某个时候他写道: It’s an anti-pattern to expose your subj
我是这样理解的: Innodb 中的缓冲池:它存储来自 Sql 表的索引和数据并缓存它以供将来查询,因此它不需要一直打扰 Mysql。 Memcached:用于存储从 Innodb 接收到的数据并对其
以防万一 vector 为空,(意外,异常(exception)情况) cppreference 在 vector::back() 上说: Calling back on an empty conta
我是一名优秀的程序员,十分优秀!