需要从python书籍中了解这个程序
我正在阅读Python烹饪书,他们在那里有一个程序:需要从python书籍中了解这个程序,python,oop,Python,Oop,我正在阅读Python烹饪书,他们在那里有一个程序: class Temperature(object): coefficients = {'c': (1.0, 0.0, -273.15), 'f': (1.8, -273.15, 32.0), 'r': (1.8, 0.0, 0.0)} def __init__(self, **kwargs): # default to absolute (Kelvin) 0, but
class Temperature(object):
coefficients = {'c': (1.0, 0.0, -273.15), 'f': (1.8, -273.15, 32.0),
'r': (1.8, 0.0, 0.0)}
def __init__(self, **kwargs):
# default to absolute (Kelvin) 0, but allow one named argument,
# with name being k, c, f or r, to use any of the scales
try:
name, value = kwargs.popitem( )
except KeyError:
# no arguments, so default to k=0
name, value = 'k', 0
# error if there are more arguments, or the arg's name is unknown
if kwargs or name not in 'kcfr':
kwargs[name] = value # put it back for diagnosis
raise TypeError, 'invalid arguments %r' % kwargs
setattr(self, name, float(value))
def __getattr__(self, name):
# maps getting of c, f, r, to computation from k
try:
eq = self.coefficients[name]
except KeyError:
# unknown name, give error message
raise AttributeError, name
return (self.k + eq[1]) * eq[0] + eq[2]
def __setattr__(self, name, value):
# maps settings of k, c, f, r, to setting of k; forbids others
if name in self.coefficients:
# name is c, f or r -- compute and set k
eq = self.coefficients[name]
self.k = (value - eq[2]) / eq[0] - eq[1]
elif name == 'k':
# name is k, just set it
object.__setattr__(self, name, value)
else:
# unknown name, give error message
raise AttributeError, name
def __str__(self):
# readable, concise representation as string
return "%s K" % self.k
def __repr__(self):
# detailed, precise representation as string
return "Temperature(k=%r)" % self.k
我不明白以下内容-有人能帮我吗
name,value=kwargs.popitem()
\uuuu getattr\uuuu
和\uuuu setattr\uuuuu
做什么。他没有在程序的最后调用中使用这些>>> from te import Temperature
>>> t = Temperature(f=70) # 70 F is...
>>> print t.c # ...a bit over 21 C
21.1111111111
>>> t.c = 23 # 23 C is...
>>> print t.f # ...a bit over 73 F
73.4
- 从
字典中删除一个(任意)项,并将其作为kwargs
元组返回。然后将其分配给两个变量,(键、值)
和name
在这种情况下,它意味着类接受一个关键字参数(其中一个是value
、k
、f
或c
),如果指定了多个关键字参数,则在查看传入的一个关键字参数后,类会抱怨(抛出一个r
)TypeError
- 和是python在运行时使用的特殊方法
翻译成t.c
,而t.\uuu getattr\uuu('c')
翻译成t.c=23
因此,将t.\uu setattr\uuu('c',23)
、t.c
或t.f
中的一个设置为整数将被路由到t.r
方法,然后该方法使用\uuu setattr\uuuu
映射来计算和设置self.coverties
查找self.k
中的一个,t.c
或t.f
被路由到t.r
方法,然后该方法基于\uuuu getattr\uuuu
映射以及self.coverties
的现有值返回一个值,以提供所需比例的温度self.k
- 从
字典中删除一个(任意)项,并将其作为kwargs
元组返回。然后将其分配给两个变量,(键、值)
和name
在这种情况下,它意味着类接受一个关键字参数(其中一个是value
、k
、f
或c
),如果指定了多个关键字参数,则在查看传入的一个关键字参数后,类会抱怨(抛出一个r
)TypeError
- 和是python在运行时使用的特殊方法
翻译成t.c
,而t.\uuu getattr\uuu('c')
翻译成t.c=23
因此,将t.\uu setattr\uuu('c',23)
、t.c
或t.f
中的一个设置为整数将被路由到t.r
方法,然后该方法使用\uuu setattr\uuuu
映射来计算和设置self.coverties
查找self.k
中的一个,t.c
或t.f
被路由到t.r
方法,然后该方法基于\uuuu getattr\uuuu
映射以及self.coverties
的现有值返回一个值,以提供所需比例的温度self.k
\uuuuu init\uuuu
,使用scale
的单个参数,然后只对类的系数进行一次尝试,并引发类型错误
(我认为这应该是值错误
)?@FlorinGhita CodeReview不是用来解释书本上的代码的。@Levleivsky你说得对,应该是自己的代码。不太确定这个“食谱示例”中要展示什么-但似乎过于复杂,而不是仅仅编写\uuuuu init\uuuuu
,使用scale
的单个参数,然后只尝试类的系数并引发类型错误
(我认为这应该是值错误
),这会有帮助吗?:)@琼斯:一小时后问我。:-)@JonClements我真的很怀疑:)就像Martijn在代表大会结束后也不会停止:)向上投票会有帮助吗?:)@琼斯:一小时后问我。:-)@JonClements我真的很怀疑:)就像Martijn即使在代表大会结束后也不会停止:)