【问题标题】:Python OOP - object has no attributePython OOP - 对象没有属性
【发布时间】:2012-10-04 10:44:36
【问题描述】:

我正在尝试学习如何编程。我真的很想学习如何编程;我喜欢它的建筑和设计方面。但是,在 Java 和 Python 中,我尝试过与对象、类、方法有关的程序,但失败了。我正在尝试为程序开发一些代码,但我很难过。我知道这是一个简单的错误。然而我迷路了!我希望有人能指导我完成一个工作计划,同时也帮助我学习(批评不仅是预期的,而且是赞赏的)。

class Converter:

    def cTOf(self, numFrom):
        numFrom = self.numFrom
        numTo = (self.numFrom * (9/5)) + 32
        print (str(numTo) + ' degrees Farenheit')
        return numTo

    def fTOc(self, numFrom):
        numFrom = self.numFrom
        numTo = ((numFrom - 32) * (5/9))
        return numTo

convert = Converter()

numFrom = (float(input('Enter a number to convert..                '))) 
unitFrom = input('What unit would you like to convert from.. ')
unitTo = input('What unit would you like to convert to..    ')

if unitFrom == ('celcius'):
    convert.cTOf(numFrom)
    print(numTo)
    input('Please hit enter..')


if unitFrom == ('farenheit'):
    convert.fTOc(numFrom)
    print(numTo)
    input('Please hit enter..')

【问题讨论】:

  • 如果你要使用这个类,不妨让这些方法static

标签: python class object python-3.x


【解决方案1】:

类和对象是完成任务的工具——它们允许您用一组方法封装数据状态。但是,您的数据只是一个数字。整数不需要封装,所以不需要创建类。

换句话说,不要因为你认为应该创建一个类,而是因为它使你的代码更简单而创建一个类。

import sys

def f_to_c(x):
    return (x - 32) * (5/9)

def c_to_f(x):
    return x * (9/5) + 32

num_from = float(input('Enter a number to convert: '))
unit_from = input('What units would you like to convert from? ')
unit_to = input('What units would you like to convert to? ')

if (unit_from, unit_to) == ('fahrenheit', 'celsius'):
    num_to = f_to_c(num_from)
elif (unit_from, unit_to) == ('celsius', 'fahrenheit'):
    num_to = c_to_f(num_from)
else:
    print('unsupported units')
    sys.exit(1)

print('{} degrees {} is {} degrees {}'
      .format(num_from, unit_from, num_to, unit_to))
输入要转换的数字:40
你想从什么单位转换?摄氏度
你想转换成什么单位?华氏度
40.0 摄氏度是 104.0 华氏度

convert 对象和Converter 类没有任何用途,因此没有它们,代码更简单,更易于阅读。

【讨论】:

  • 我认为它最终会使它变得更简单。然而,我显然错了。下次吃小点!感谢您的有用回答
【解决方案2】:

1.应该是

def fTOc(self, numFrom):
    self.numFrom = numFrom

cTOf 方法也有同样的问题。

2.变量numTo未定义

numTo = convert.cTOf(numFrom)
print (numTo)

【讨论】:

  • 既然numFrom 没有在类的其他任何地方使用,为什么要让它成为一个成员变量呢?
  • @NullUserException 你说得对,我只是调试代码让它工作。
【解决方案3】:

你几乎猜对了。

没有self.numFrom,因为它是您的参数。去掉numFrom =self.numFrom这行就没事了。

【讨论】:

  • cTOf 后来使用了self.numFrom