Python 在类中使用函数
我编写了一个类来包装一些字符串操作方法,例如:Python 在类中使用函数,python,class,Python,Class,我编写了一个类来包装一些字符串操作方法,例如: class bstring(str): words2numbers = { '1' : 'one ', '2' : 'two ', '3' : 'three ', '4' : 'four ', '5' : 'five ', '6' : 'six ', '7' : 'seven ', '8' : 'eight ', '9' : 'nine ', '0' : 'ze
class bstring(str):
words2numbers = {
'1' : 'one ',
'2' : 'two ',
'3' : 'three ',
'4' : 'four ',
'5' : 'five ',
'6' : 'six ',
'7' : 'seven ',
'8' : 'eight ',
'9' : 'nine ',
'0' : 'zero '
}
def __init__(self,s):
self.s = s
def alpha_num(self):
return ''.join(words2numbers[i] if i in words2numbers else i for i in self.s)
def replace_punctuation(self):
import string
table = str.maketrans({key: None for key in string.punctuation})
return self.s.translate(table)
def norm_func(self):
s = self.alpha_num()
s = replace_punctuation(s)
s = ' '.join(i for i in s.split())
return s.lower()
def encode_phonetic(self):
return [i for i in norm_func()]
通过示例测试:
rand_string = '123 Josh Street, Ontoria, 675 Canada'
string = bstring(rand_string)
print(string.norm_func())
print(string.encode_phonetic())
第一次打印
返回一二三josh street ontoria六七五canada
,如预期,但第二次打印失败,出现名称错误:未定义名称“norm_func”
我知道从类内调用函数需要self
实例,但我不明白为什么当我运行第一个print
函数并成功调用其他两个函数时,它会起作用,其中一个没有self
既然norm\u函数
起作用,为什么encode\u拼音
不起作用呢
回溯错误
123Josh街ontoria六七五加拿大
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
4.
5打印(string.norm_func())
---->6打印(string.encode_拼音())
在encode_拼音中(self)
31
32 def encode_拼音(self):
--->33返回[norm_func()中的i代表i]
进一步编辑
糟糕的是,内核定义了存在于全局空间的函数,而我运行它们时认为它只存在于局部空间。重新启动内核后,错误会有所不同。按照建议给出,
words2numbered未定义
要引用对象的方法,您需要指定每次处理的实例(与Java不同)。因此,encode\u拼音
需要:
def encode_phonetic(self):
return [i for i in self.norm_func()]
# ^^^^^
同样的问题也存在于一些已定义的方法中,例如,
norm\u func
指的是alpha\u数
和替换标点符号
,而不使用self
这是相当混乱的,您定义类bstring
,但创建f_string
对象,定义函数alpha_num
,然后调用alpha_numbers
。最好直接复制粘贴代码。抱歉,我做了一些编辑。我太糊涂了。HahaI不相信给出的代码会像您描述的那样工作。@khelwood不相信基于什么?基于它与Python代码没有任何意义。你会得到名称错误:第一次调用alpha_num()
时,没有定义全局名称“words2numes”。你知道为什么替换标点符号
有效,尽管我没有放置self
?对字段的唯一引用前面有self
,即self.s.translate(表)
@BernardL我认为它不应该工作,除非你对函数有一个全局定义。试着在课堂外给它打电话——如果有其他的定义,那应该可以。是的,我的错,它失败了。如果您看到更新的部分,那么当我在前面声明变量时(在示例之外),我感到很困惑。
def encode_phonetic(self):
return [i for i in self.norm_func()]
# ^^^^^