在 Python 中使用类时取回正确的值

Posted

技术标签:

【中文标题】在 Python 中使用类时取回正确的值【英文标题】:Getting back the correct values when using classes in Python 【发布时间】:2014-06-06 06:08:48 【问题描述】:

所以我开始学习编程和 Python,并尝试编写一些代码来用 Python 制作文字扫描仪。对象是获取用户给定的单词字符串并返回以 (TYPE, WORD) 格式读取的元组列表,其中 TYPE 是单词的类型,WORD 是单词本身。我通过在一组包含该类型单词的列表中搜索单词来确定单词的类型。如果单词存在,或者是一个数字,则元组返回相应的类型和单词;如果单词不存在,则元组返回“错误”和单词。因此,例如,如果输入是“我的狗向北行驶了 3 天”,则返回的列表将显示为:

[('error', 'My'), ('noun', 'dog'), ('error', went), 
('number', 'north'), ('error', 'for'), ('number', '3'), ('error', 'days')]

或者类似的东西。

无论如何,当我输入代码以尝试通过从命令行的主项目目录运行它来使其工作时,我不断返回的唯一值是这条名为

的消息
<__main__.scan object at 0x7fe88b5cd750>

无论我如何尝试重新调整代码,无论我尝试将最终打印的句子声明为什么,我一直将 ma​​in.scan 对象作为字符串的值扫描仪。

这是我做的代码供参考:

from otherfunc import numconv

class scan(object):

    def __init__(self, string):
        self.string = string

    def scanner(self):
        direction = ['north', 'south', 'east', 'west', 'down',
                     'up', 'left', 'right', 'back']
        verb = ['go', 'stop', 'kill', 'eat']
        stop = ['the', 'in', 'of', 'from', 'at', 'it']
        noun = ['door', 'bear', 'princess', 'cabinet']
        words = split(self.string)
        sentence = []

        for word in words:
            if word in direction:
                analysis = ('direction', word)
                sentence.append(analysis)

            elif word in verb:
                analysis = ('verb', word)
                sentence.append(analysis)

            elif word in stop:
                analysis = ('stop', word)
                sentence.append(analysis)

            elif word in noun:
                analysis = ("noun", word)
                sentence.append(analysis)
            else:
                value = numconv(word)
                if value != None:
                    analysis = value
                    sentence.append(analysis)
                else:
                    analysis = ('error', word)
                    sentence.append(analysis)
        return sentence

string = raw_input("Type in your sentence here: ")
sentlist = scan(string)
print sentlist

这是我在上面代码中导入的模块的代码:

class numconv(object):

def __init__(self, s):
    self.s = s

def convert_number(self, s):
    try:
        self.value = int(s)
        return ("number", self.value)
    except ValueError:
        return None

问题是,我已经得到了它的基本框架,可以按预期以另一种格式工作。在那种格式中,我没有声明类,只是将您在“scan”和“numconv”类中看到的所有内容称为文件中的模块来运行扫描程序。但我正在尝试将其转换为“类”格式,并尝试将扫描仪称为“扫描”类的实例。到目前为止,我并没有得到我想要的 (TYPE, WORD) 元组的列表,而是一直得到那个 ma​​in.scan 对象作为返回值。如果有人可以这么好,他们能否解释一下我在尝试将其转换为类格式时出错的地方,以及为什么我只将“ma​​in.scan object”作为返回值当我尝试使用用户输入字符串调用扫描类时?谢谢。

【问题讨论】:

【参考方案1】:

在你对类的使用中:

sentlist = scan(string)
print sentlist;

您正在创建该类的一个实例并打印它。 相反,我相信您想调用扫描仪成员函数:

mySring = "somestring";    // declares a string 
s = scan(myString);       // creates instance of class, passing string as arg
sentlist = s.scanner();  // runs the function scanner, returning output 

【讨论】:

不完全是。我想:声明一个要运行的字符串,创建该类的一个实例,通过该实例运行该字符串,取回我应该通过使用“字符串”参数调用该实例获得的列表,并打印该列表。 谢谢,我想这正是我想要的。

以上是关于在 Python 中使用类时取回正确的值的主要内容,如果未能解决你的问题,请参考以下文章

在 GraphQL 中编辑类时的正确工作流程

向上转换到基类时如何使用继承的类成员的值

python如何将列表存储在文件中并取回

尝试在 Python 3 中使用 C++ 类时出错

在 Python-Scikit Learn 中对决策树表进行矢量化后取回原始特征名称?

使用 K-Means 聚类时,为啥我的数据点不在正确准确的聚类中?