我实例化时如何引用传递给我的类的对象?

时间:2013-08-06 20:58:37

标签: python class namespaces

我有这个班级

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()

它就像一个魅力,但这限制了我正在努力的这个东西的便携性。因为任何用户都必须使用我在函数中使用的任何标签来引用该路径。

1 个答案:

答案 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