嗯,我最近开始研究Python,但是我发现,由于语言的工作方式,我可以做一些我不知道它会有什么样的连续性的事情
举个例子:
class crazyClass:
def __init__(self):
self.name = "Crazy Class" # Irrelevant, just to have something
def madnessUnleashed(self):
print("WAJALAKAMAKACHAKA!")
# Now I want to use madnessUnleashed
# But I don't want to instantiate any object.
crazyClass.madnessUnleashed(crazyClass()) # Damn, I'm instantiating an object, but is it temporary or what?
我不确定这是否仅仅是一种好奇,或者这是否有用,或者这是否会导致内存泄漏
任何回答都将不胜感激。谢谢
它不会产生任何内存泄漏。从创建对象的行开始,事情按以下顺序发生:
crazyClass
的新实例被创建madnessUnleashed
被作为静态方法调用,因此self
在本例中是之前创建的对象李>基本上没有什么特别的事情发生。 您可以在这里阅读有关垃圾收集器的更多信息:https://rushter.com/blog/python-garbage-collector/
您可以使用^{} 来实现这一点—它不需要类实例,因此可以仅使用类来调用
将其用作方法上的装饰器:
在一个类中有一个普通方法的例子中,
crazyClass.madnessUnleashed(crazyClass())
实际上创建了一个类的实例,这可以看作是一种开销。如果实例化它涉及到文件创建、网络请求、数据库连接等,或者如果在数以百万计的循环中使用它们,那么它可能会对性能产生更高的影响,重复创建这些实例将影响性能至于您关于内存泄漏的问题:一旦方法执行完毕,Python的垃圾回收器将删除该实例(尽管之后不会立即删除),因此它不是内存泄漏
相关问题 更多 >
编程相关推荐