gpt4 book ai didi

python - 创建一个有点像博格的类

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:24 24 4
gpt4 key购买 nike

我正在尝试制作一个类似博格的类(class)。我希望所有实例共享一个特定的属性,但我希望实例独有其他属性。这是我目前所拥有的:

class SharedFacility:
_facility = None

def __init__(self):
entries = {'facility': self._facility}
self.__dict__.update(entries)

def _getfacility(self):
return self._facility

def _setfacility(self, value):
self._facility = value

facility = property(_getfacility, _setfacility)


class Warning(SharedFacility):
def __init__(self, warnlevel, warntext):
SharedFacility.__init__(self)
print "Warning.__init__()"
self.warntext = warntext
self.warnlevel = warnlevel

def __call__(self):
self.facility(self.warnlevel, self.warntext)


def functionOne(a,b):
print 'functionOne: a=%s, b=%s' % (a,b)

def functionTwo(a,b):
print 'functionTwo: a=%s, b=%s' % (a,b)

####################################################
w1 = Warning(1, 'something bad happened')
w1.facility = functionOne
w2 = Warning(5, 'something else bad happened')
import pdb; pdb.set_trace()

if w1.facility is w2.facility:
print "They match!"

w1() # functionOne: a=1, b='something bad happened'
w2() # functionOne: a=5, b='something else bad happened'

w2.facility = functionTwo
if w1.facility is w2.facility:
print "They match!"

w1() # functionTwo: a=1, b='something bad happened'
w2() # functionTwo: a=5, b='something else bad happened'

上面的代码不起作用。我希望 w1.facility 和 w2.facility 是对同一对象的引用,但 w1.warntext 和 w2.warntext 是两个不同的值。我正在使用 python 2.4.3(没有意义提到我升级,因为我不能)。

解决方案:

class Warning(object):
_facility = None

def __init__(self, warnlevel, warntext):
print "Warning.__init__()"
self._warntext = warntext
self._warnlevel = warnlevel

def __call__(self):
Warning._facility(self._warnlevel, self._warntext)

def _getfacility(self):
return Warning._facility

def _setfacility(self, value):
Warning._facility = value

facility = property(_getfacility, _setfacility)

@staticmethod
def functionOne(a,b):
print 'functionOne: a=%s, b=%s' % (a,b)

@staticmethod
def functionTwo(a,b):
print 'functionTwo: a=%s, b=%s' % (a,b)

最佳答案

这是我会做的:

class BorgLike:
_shared = 'default'
def __init__(self, unique):
self.unique = unique
@property
def shared(self):
return BorgLike._shared
@shared.setter
def shared(self, value):
BorgLike._shared = value

我希望您知道如何将此示例用于您自己的目的。我不太确定您的代码需要什么,所以我避免猜测并写了一个最小的示例。

关于python - 创建一个有点像博格的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com