DateTime.UtcNow.ToString("s")
Возвраты что-то как 2008-04-10T06:30:00
UtcNow
, очевидно, возвращается время UTC , таким образом, нет никакого вреда в:string.Concat(DateTime.UtcNow.ToString("s"), "Z")
Да, можно. Используйте декоратор @property
. Например, если у вас есть поле с именем «example», вы не можете сделать что-то вроде этого:
class Base(object):
@property
def example(self):
raise NotImplementedError("Subclasses should implement this!")
Выполнение следующего приводит к ошибке NotImplementedError
, как вы хотите.
b = Base()
print b.example
Альтернативный ответ:
@property
def NotImplementedField(self):
raise NotImplementedError
class a(object):
x = NotImplementedField
class b(a):
# x = 5
pass
b().x
a().x
Это похоже на ответ Эвана, но кратко и дешево - вы получите только один экземпляр NotImplementedField.
def require_abstract_fields(obj, cls):
abstract_fields = getattr(cls, "abstract_fields", None)
if abstract_fields is None:
return
for field in abstract_fields:
if not hasattr(obj, field):
raise RuntimeError, "object %s failed to define %s" % (obj, field)
class a(object):
abstract_fields = ("x", )
def __init__(self):
require_abstract_fields(self, a)
class b(a):
abstract_fields = ("y", )
x = 5
def __init__(self):
require_abstract_fields(self, b)
super(b, self).__init__()
b()
a()
Обратите внимание на передачу типа класса в require_abstract_fields
, поэтому, если несколько унаследованных классов используют это, они не все проверяют поля самого производного класса. Возможно, вы сможете автоматизировать это с помощью метакласса, но я не стал вдаваться в подробности. Допускается определение поля как None.