Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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书籍中了解这个程序_Python_Oop - Fatal编程技术网

需要从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

我正在阅读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 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
          的现有值返回一个值,以提供所需比例的温度


        ?@FlorinGhita CodeReview不是为了解释书本上的代码。@Levlevtsky你是对的,应该是自己的代码。不太确定这个“食谱示例”中要展示什么-但似乎过于复杂,而不是仅仅编写
        \uuuuu init\uuuu
        ,使用
        scale
        的单个参数,然后只对类的系数进行一次尝试,并引发
        类型错误
        (我认为这应该是
        值错误
        )?@FlorinGhita CodeReview不是用来解释书本上的代码的。@Levleivsky你说得对,应该是自己的代码。不太确定这个“食谱示例”中要展示什么-但似乎过于复杂,而不是仅仅编写
        \uuuuu init\uuuuu
        ,使用
        scale
        的单个参数,然后只尝试类的系数并引发
        类型错误
        (我认为这应该是
        值错误
        ),这会有帮助吗?:)@琼斯:一小时后问我。:-)@JonClements我真的很怀疑:)就像Martijn在代表大会结束后也不会停止:)向上投票会有帮助吗?:)@琼斯:一小时后问我。:-)@JonClements我真的很怀疑:)就像Martijn即使在代表大会结束后也不会停止:)