在Python中引用实例属性的简写方法

时间:2017-10-18 15:01:24

标签: python

我有一个Python类,其中包含许多变量,包括:

class file:
    def __init__(self, name)
        self.name = name
        self.size = None
        self.num_lines = None
        self.directory = None
  • 请注意,这仅仅是一个例子 - 我的真正的类具有非常描述性(因此很长)的名称和更多的成员

创建实例后,我必须为这些变量赋值:

f = file("abc.txt")
f.size = get_file_info(f.name)
f.num_lines = count_lines(f.name)
f.directory = get_dir(f.name)
f.new_name = root + f.directory + f.name + f.size

我真正喜欢的是 使用 关键字的语法糖:

f = file("abc.txt")
using f:
    size = get_file_info(name)
    num_lines = count_lines(name)
    directory = get_dir(name)
    new_name = root + directory + name + size

也就是说,我想提供一个新的上下文,在Python完成所有剩余的搜索之前,首先搜索变量。

有这样的事吗?如果没有,它似乎是该语言的有用补充。

编辑:根据答案,我故意不想在 init 函数中执行此操作。出于个人原因。不是真的 - 它在我的用例中没有意义

2 个答案:

答案 0 :(得分:0)

您要放在using区块中的所有代码都应由您的班级__init__方法处理。

class File:
    def __init__(self, name)
        self.name = name
        self.size = get_file_info(name)
        self.num_lines = count_lines(name)
        self.directory = get_dir(name)
        self.new_name = os.path.join(root, self.directory, self.name, self.fize)

f = File("abc.txt")

您所暗示的某些函数(get_file_info等)可能更适合作为File类的方法,而不是以文件名作为参数的独立函数。

答案 1 :(得分:0)

此语言没有支持。您只能按功能和模块创建变量名称空间。甚至没有课程(这就是为什么,即使在课堂上,你也必须使用self来引用它的属性)