我们从Python开源项目中,提取了以下11个代码示例,用于说明如何使用abc.abstractstaticmethod()。
def test_abstractstaticmethod_basics(self): @abc.abstractstaticmethod def foo(): pass self.assertTrue(foo.__isabstractmethod__) @staticmethod def bar(): pass self.assertFalse(hasattr(bar, "__isabstractmethod__")) class C(metaclass=abc.ABCMeta): @abc.abstractstaticmethod def foo(): return 3 self.assertRaises(TypeError, C) class D(C): @staticmethod def foo(): return 4 self.assertEqual(D.foo(), 4) self.assertEqual(D().foo(), 4)
def test_abstractstaticmethod_basics(self): @abc.abstractstaticmethod def foo(): pass self.assertTrue(foo.__isabstractmethod__) @staticmethod def bar(): pass self.assertFalse(getattr(bar, "__isabstractmethod__", False)) class C(metaclass=abc.ABCMeta): @abc.abstractstaticmethod def foo(): return 3 self.assertRaises(TypeError, C) class D(C): @staticmethod def foo(): return 4 self.assertEqual(D.foo(), 4) self.assertEqual(D().foo(), 4)
def test_abstractmethod_integration(self): for abstractthing in [abc.abstractmethod, abc.abstractproperty, abc.abstractclassmethod, abc.abstractstaticmethod]: class C(metaclass=abc.ABCMeta): @abstractthing def foo(self): pass # abstract def bar(self): pass # concrete self.assertEqual(C.__abstractmethods__, {"foo"}) self.assertRaises(TypeError, C) # because foo is abstract self.assertTrue(isabstract(C)) class D(C): def bar(self): pass # concrete override of concrete self.assertEqual(D.__abstractmethods__, {"foo"}) self.assertRaises(TypeError, D) # because foo is still abstract self.assertTrue(isabstract(D)) class E(D): def foo(self): pass self.assertEqual(E.__abstractmethods__, set()) E() # now foo is concrete, too self.assertFalse(isabstract(E)) class F(E): @abstractthing def bar(self): pass # abstract override of concrete self.assertEqual(F.__abstractmethods__, {"bar"}) self.assertRaises(TypeError, F) # because bar is abstract now self.assertTrue(isabstract(F))
def __init__(self, callable): callable.__isabstractmethod__ = True super(abstractstaticmethod, self).__init__(callable)
def _ensure_everything_is_abstract(attributes): # all methods and properties are abstract on a pure interface namespace = {} functions = [] interface_method_signatures = {} interface_property_names = set() for name, value in six.iteritems(attributes): if _builtin_attrs(name): pass # shortcut elif getattr(value, '__isabstractmethod__', False): if isinstance(value, (staticmethod, classmethod, types.FunctionType)): if isinstance(value, (staticmethod, classmethod)): func = value.__func__ else: func = value functions.append(func) interface_method_signatures[name] = _get_function_signature(func) elif isinstance(value, property): interface_property_names.add(name) elif isinstance(value, staticmethod): func = value.__func__ functions.append(func) interface_method_signatures[name] = _get_function_signature(func) value = abstractstaticmethod(func) elif isinstance(value, classmethod): func = value.__func__ interface_method_signatures[name] = _get_function_signature(func) functions.append(func) value = abstractclassmethod(func) elif isinstance(value, types.FunctionType): functions.append(value) interface_method_signatures[name] = _get_function_signature(value) value = abstractmethod(value) elif isinstance(value, property): interface_property_names.add(name) functions.extend([value.fget, value.fset, value.fdel]) # may contain Nones value = abstractproperty(value.fget, value.fset, value.fdel) namespace[name] = value return namespace, functions, interface_method_signatures, interface_property_names
def abstractstaticmethod(func): return func