Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是不是;“好的”;要开始向Skyfield对象添加属性?_Python_Skyfield - Fatal编程技术网

Python 是不是;“好的”;要开始向Skyfield对象添加属性?

Python 是不是;“好的”;要开始向Skyfield对象添加属性?,python,skyfield,Python,Skyfield,在这里,“OK”当然意味着AYOR(风险自负),但如果避免与现有属性名称发生明显冲突,则不会出现可预见的问题 物体——特别是行星——通常具有有限数量的属性。我经常编写简短的脚本来提取我保存为文本并稍后使用的数字数据。这些基本上是“一次性”脚本,因为我很少使用它们一次或两次以上,也从来没有共享过它们 当我编写更持久的代码时,我当然会创建自己的容器对象 我的问题:它似乎对我很有效,所以在这个特定的上下文中,除了属性名称冲突之外,还有什么可能出错的吗 返回: 147100175.99 15210376

在这里,“OK”当然意味着AYOR(风险自负),但如果避免与现有属性名称发生明显冲突,则不会出现可预见的问题

物体——特别是行星——通常具有有限数量的属性。我经常编写简短的脚本来提取我保存为文本并稍后使用的数字数据。这些基本上是“一次性”脚本,因为我很少使用它们一次或两次以上,也从来没有共享过它们

当我编写更持久的代码时,我当然会创建自己的容器对象

我的问题:它似乎对我很有效,所以在这个特定的上下文中,除了属性名称冲突之外,还有什么可能出错的吗

返回:

147100175.99 152103762.948 (3, 1000)
147100175.99 152103762.948 (3, 1000)

这确实是一种在非正式Python代码中偶尔会遇到的模式。除了未来的属性名称冲突之外,另一个可能出错的主要问题是,库作者在希望更有效地创建数百万对象的人的怂恿下,添加了
\uuuuuuu slots\uuuu
规范,当您尝试添加其他属性时,会出现错误

如果出现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,可以使用您想要使用的类的自己的子类。如果子类也未能指定
\uuuuu slots\uuuuu
,至少说
\uuuuuu slots\uuuuu=[]
,即使它没有更多要添加的属性,那么子类的实例是完全开放的,可以具有任何属性,因此您可以始终创建自己的“解锁”子类实例并允许它们具有任何属性

请注意,像
earth
这样的对象有资格成为字典键,因此,如果您有一条与每个行星相关的信息,您可以说:

positions = {}
positions[earth] = ...

这是一种常见的模式,当您需要记住关于一组对象中的每个对象的额外信息时。

除非类是专门为对象设计的,否则向对象添加任意元素几乎总是一个坏主意。这可能会在以后以可怕的方式打破。你为什么要这样做?如果必须的话,更好的方法是创建自己的容器类来包装skyfield对象,并包含与它相关联的任何附加属性。@uhoh,这稍微好一点,因为它有助于避免名称冲突(从技术上讲,您只添加了一个属性)。但我仍然同意@iguanaaut;创建一个容器类,该类在其构造函数中接受skyfield对象,并计算和分配实例变量所需的任何值。@pzp那么我们都同意这一点,谢谢!但如果我这样做,除了属性名中的冲突之外,还有其他可能出错的事情吗?python中更深一点的东西,我不知道?这是我的问题。我是优秀编程的倡导者,但我仍然对什么事情会出错抱有病态的好奇心。对于大多数Python对象,什么都没有。分配不存在的属性只是对象的快捷方式,除非对象正在使用插槽,或已覆盖插槽的
\uuuuu setattr\uuuu
positions = {}
positions[earth] = ...