我有这个班级
class SECHeader(object):
def __init__(self,header_path):
self.header = open(header_path).read()
我在这个类中有一些方法,我尝试做的一个方法需要解析名称
def parsed_name(self):
return header_path.split('-')[-1]
如果在我的代码中我使用名称header_path来识别我正在尝试操作的东西,这样可以正常工作
for header_path in header_paths:
header = SECHeader(header_path)
print header.parsed_name()
但如果我更改名称
for named_path in header_paths:
header = SECHeader(named_path)
print header.parsed_name()
我得到一个NameError
我玩了 - 如果可以在parsed_name函数中使用任何名称,只要我对要处理的对象使用相同的名称,但我似乎无法弄清楚如何为用户命名不必使用我的命名方案
特别是如果我将parsed_name函数更改为
def parsed_name(self):
return banana.split('-')[-1]
并在我的循环中将其更改为
for banana in header_paths:
header = SECHeader(banana)
print header.parsed_name()
它就像一个魅力,但这限制了我正在努力的这个东西的便携性。因为任何用户都必须使用我在函数中使用的任何标签来引用该路径。
答案 0 :(得分:1)
这里的问题是你将header_path声明为 init 函数的变量。它的范围是 init 函数的本地范围。
您需要将header_path关联为类实例的变量。
Class SECHeader(object):
def __init__(self,header_path):
self.header_path = header_path # Instantiate a variable for class object
self.header = open(header_path).read()
def parsed_name(self):
return self.header_path.split('-')[-1] # Call the associated variable
另一种方法是实际调用您在parsed_name中作为SECHeader参数提供的变量。此变量名称将位于类名称空间中。
for banana in header_paths:
header = SECHeader(banana)
print header.parsed_name()
Class SECHeader(object):
def __init__(self,header_path): # header_path takes value of banana
# and ends scope in __init__
self.header = open(header_path).read()
def parsed_name(self):
return banana.split('-')[-1] # banana was passed to class and is known