Надеюсь, что в вашем случае может работать следующий фрагмент кода: -
if ((len(a) == len(b)) and
(all(i in a for i in b))):
print 'True'
else:
print 'False'
Это гарантирует, что все элементы в обоих списках a
& amp; b
одинаковы независимо от того, находятся ли они в одном порядке или нет.
Для лучшего понимания см. мой ответ в на этот вопрос
Синглтоны бессмысленны в python.
class A:
class_var = object()
# two objects
a, b = A(), A()
# same var everywhere
assert a.class_var is b.class_var is A.class_var
Python int
s отличаются от простых объектов
s, так что это не всегда так просто. Но для ваших целей этого кажется достаточно:
class Stats:
twitter_count = 0
Stats.twitter_count +=1
Stats.twitter_count +=1
assert Stats.twitter_count == 2
Я предполагаю предоставление фрагмента кода Python, чтобы показать, как делают , работа свойства и staticmethod была бы полезна.
Они оба - дескрипторы, который реализует __, добираются __ или __ набор __
, свойство является дескриптором данных
class Property(object):
"Emulate PyProperty_Type() in Objects/descrobject.c"
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
self.fget = fget
self.fset = fset
self.fdel = fdel
if doc is None and fget is not None:
doc = fget.__doc__
self.__doc__ = doc
def __get__(self, obj, objtype=None):
if obj is None:
return self
if self.fget is None:
raise AttributeError("unreadable attribute")
return self.fget(obj)
def __set__(self, obj, value):
if self.fset is None:
raise AttributeError("can't set attribute")
self.fset(obj, value)
def __delete__(self, obj):
if self.fdel is None:
raise AttributeError("can't delete attribute")
self.fdel(obj)
def getter(self, fget):
return type(self)(fget, self.fset, self.fdel, self.__doc__)
def setter(self, fset):
return type(self)(self.fget, fset, self.fdel, self.__doc__)
def deleter(self, fdel):
return type(self)(self.fget, self.fset, fdel, self.__doc__)
И , staticmethod является дескриптором неданных
class StaticMethod(object):
"Emulate PyStaticMethod_Type() in Objects/funcobject.c"
def __init__(self, f):
self.f = f
def __get__(self, obj, objtype=None):
return self.f
Статические методы не имеют смысла в Python. Это потому, что они не делают ничего такого, чего не могут делать методы класса, и в будущем их будет проще расширить (когда несколько методов класса используют друг друга и т. Д.).
Вам нужно просто свойство метода класса.
У меня здесь есть свойство метода класса из моего кода. Это только для чтения, это все, что мне нужно (так что остальное - упражнение для читателя):
class ClassProperty (property):
"""Subclass property to make classmethod properties possible"""
def __get__(self, cls, owner):
return self.fget.__get__(None, owner)()
# how I would use it
class Stats:
singleton_object = None
@ClassProperty
@classmethod
def singleton(cls):
if cls.singleton_object is None:
cls.singleton_object = cls()
return cls.singleton_object