类中的 Python 主函数

Posted

技术标签:

【中文标题】类中的 Python 主函数【英文标题】:Python main function in class 【发布时间】:2017-07-10 06:13:27 【问题描述】:

我是 python 新手,main() 方法和类 def 让我感到困惑。我正在尝试创建一个布隆过滤器,但我的程序不断终止,因为我认为我没有正确调用。

    class BloomFilter(object):
        def __init__(self, numBits, numHashFunctions):
            self.numBits = numBits
            self.bitArray = [0] * numBits
            self.hash = bloomFilterHash(numBits, numHashFunctions)

        def insert(self, key):

        def lookup(self, key):

        def rand_inserts(self,num):

        def main(): #not sure if i should put this inside or outside class
            bloomfilter = BloomFilter(100,5)
            bloomfilter.rand_inserts(15)

    if __name__ == '__main__':   
        BloomFilter().main()

所以如果我想创建一个具有 100 个 numBits 和 5 个哈希函数的布隆过滤器,我应该在 if __name__ == '__main__' 下还是在 def main() 下调用它?我不确定我是否正确调用这些,因为我更熟悉 Java。谢谢!

    def main():
        bloomfilter = BloomFilter(100,5)
        bloomfilter.rand_inserts(15)

【问题讨论】:

Python 中没有特殊的“main”函数。 【参考方案1】:

name == '__main__' 子句是为了确保您的代码仅在直接调用模块时运行,而不是在例如从另一个模块中的模块导入某些内容时运行。 main() 不是 python 类的特殊方法,所以我相信你在这里的目标,以简化的方式,如下:

class BloomFilter(object):
    def __init__(self, numBits, numHashFunctions):
        self.numBits = numBits
        self.bitArray = [0] * numBits
        self.hash = bloomFilterHash(numBits, numHashFunctions)


if __name__ == '__main__':
    # creates an instance of the class
    bloomfilter = BloomFilter(100,5)
    # apply some method to instance...
    bloomfilter.rand_inserts(15)

【讨论】:

【参考方案2】:

您可能希望将 main() 放在类之外:

class BloomFilter(object):
    def __init__(self, numBits, numHashFunctions):
        self.numBits = numBits
        self.bitArray = [0] * numBits
        self.hash = bloomFilterHash(numBits, numHashFunctions)

    def insert(self, key):

    def lookup(self, key):

    def rand_inserts(self,num):



 def main():
     some_value = Bloomfilter(100, 5)

     some_value.rand_inserts(15)

 main()

【讨论】:

以上是关于类中的 Python 主函数的主要内容,如果未能解决你的问题,请参考以下文章

objective-c 中如何在一个函数中调用自己类中的另外一个函数

java中一个类怎么调用另一个类中的函数

如何在主方法中从类中调用构造函数

我可以在类中有一个命名的 lambda 函数作为变量并尝试从主函数调用命名的 lambda 吗?

如何将参数传递给 Python 模块中的主函数?

CString类中的函数