为什么同一类的两个实例具有不同的属性(Python)是明智的?
现在,如果你比较dirapple和dirgoogle,苹果实例将有一个额外的属性ceo 然而,苹果股票和谷歌股票都是真实的 允许具有不同属性的对象同时成为同一类的实例背后的直觉是什么?实际上,你什么时候用这个为什么同一类的两个实例具有不同的属性(Python)是明智的?,python,python-3.x,Python,Python 3.x,现在,如果你比较dirapple和dirgoogle,苹果实例将有一个额外的属性ceo 然而,苹果股票和谷歌股票都是真实的 允许具有不同属性的对象同时成为同一类的实例背后的直觉是什么?实际上,你什么时候用这个 我本以为属于同一类的实例的对象必须具有相同的属性列表。这通常是没有用的,并且不鼓励使用,这两个原因都是出于样式的原因,并且因为在CPython中,它通过中断使每个实例使用更多的内存 当它出现时,它通常用于缓存一些昂贵的计算值,这些值可能并不总是被使用,但如果它是为重用而计算的,则应该存储这
我本以为属于同一类的实例的对象必须具有相同的属性列表。这通常是没有用的,并且不鼓励使用,这两个原因都是出于样式的原因,并且因为在CPython中,它通过中断使每个实例使用更多的内存 当它出现时,它通常用于缓存一些昂贵的计算值,这些值可能并不总是被使用,但如果它是为重用而计算的,则应该存储这些值,或者在对象主要充当具有属性访问语义的字符串键控字典的情况下,类似于JSON对象 为了启用这些公认不常见的用例,大多数Python对象将它们的属性存储在一个隐藏的dict中,并且它们在uu init_u_u_u_u中的赋值和其他时候的赋值之间没有太大区别 如果不需要此功能,可以禁用创建任意属性以明确描述合法属性;这将阻止创建任何其他属性,并进一步减少类的每个实例内存使用,甚至比密钥共享字典所能做的还要多。在您的情况下,您可以使用:
class Stock:
... def __init__(self, ticker, price):
... self.ticker = ticker
... self.price = price
...
>>> apple = Stock('APPL', 100)
>>> apple.ceo='tim cook'
>>> google = Stock('GOOG', 10)
它通常没有用处,也不鼓励使用,这既是出于样式的原因,也是因为在CPython中,它通过中断使每个实例使用更多内存 当它出现时,它通常用于缓存一些昂贵的计算值,这些值可能并不总是被使用,但如果它是为重用而计算的,则应该存储这些值,或者在对象主要充当具有属性访问语义的字符串键控字典的情况下,类似于JSON对象 为了启用这些公认不常见的用例,大多数Python对象将它们的属性存储在一个隐藏的dict中,并且它们在uu init_u_u_u_u中的赋值和其他时候的赋值之间没有太大区别 如果不需要此功能,可以禁用创建任意属性以明确描述合法属性;这将阻止创建任何其他属性,并进一步减少类的每个实例内存使用,甚至比密钥共享字典所能做的还要多。在您的情况下,您可以使用:
class Stock:
... def __init__(self, ticker, price):
... self.ticker = ticker
... self.price = price
...
>>> apple = Stock('APPL', 100)
>>> apple.ceo='tim cook'
>>> google = Stock('GOOG', 10)