但是,我想创建一个类,将方法放入内存中一次,然后认为可以共享这些方法的实例必须放入内存中,而不需要这些方法。
发布于 2018-06-24 07:15:44
方法只“放入内存”一次。方法是字节码指令序列,将只存储一次。然而,属性(方法在其上操作)则不是。
我认为,您混淆了类属性和对象属性的区别。按照以下示例中所示使用它们:
class Foo:
def __init__(self):
self.object_prop = None
def set(self, val):
self.object_prop = val
def get(self):
return self.object_prop
然后你可以像这样使用它:
a = Foo()
a.set(3)
print(a.get()) # prints 3
b = Foo()
b.set(4)
print(a.get()) # prints 3
类属性示例如下所示:
class Foo:
class_prop = None
@classmethod
def set(cls, val):
cls.class_prop = val
@classmethod
def get(cls):
return cls.class_prop
a = Foo()
a.set(3)
print(a.get()) # prints 3
b = Foo()
b.set(4)
print(a.get()) # prints 4
也许这就是你要找的东西。
在评论中,您指出您正在寻找python中的单例实现。在python中,单例是一种反模式,需要不惜一切代价加以避免。但是,在StackOverflow上进行简单搜索会得到following result
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Logger(metaclass=Singleton):
pass
使用此实现,所有对象都将具有相同的内存地址:
>>> id(Logger())
140202032740616
>>> id(Logger())
140202032740616
https://stackoverflow.com/questions/51005716
复制相似问题