MCPcopy Index your code
hub / github.com/python/cpython / test_metaclass

Method test_metaclass

Lib/test/test_descr.py:476–816  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

474 self.assertEqual(a[100:200], (100,200))
475
476 def test_metaclass(self):
477 # Testing metaclasses...
478 class C(metaclass=type):
479 def __init__(self):
480 self.__state = 0
481 def getstate(self):
482 return self.__state
483 def setstate(self, state):
484 self.__state = state
485 a = C()
486 self.assertEqual(a.getstate(), 0)
487 a.setstate(10)
488 self.assertEqual(a.getstate(), 10)
489 class _metaclass(type):
490 def myself(cls): return cls
491 class D(metaclass=_metaclass):
492 pass
493 self.assertEqual(D.myself(), D)
494 d = D()
495 self.assertEqual(d.__class__, D)
496 class M1(type):
497 def __new__(cls, name, bases, dict):
498 dict['__spam__'] = 1
499 return type.__new__(cls, name, bases, dict)
500 class C(metaclass=M1):
501 pass
502 self.assertEqual(C.__spam__, 1)
503 c = C()
504 self.assertEqual(c.__spam__, 1)
505
506 class _instance(object):
507 pass
508 class M2(object):
509 @staticmethod
510 def __new__(cls, name, bases, dict):
511 self = object.__new__(cls)
512 self.name = name
513 self.bases = bases
514 self.dict = dict
515 return self
516 def __call__(self):
517 it = _instance()
518 # Early binding of methods
519 for key in self.dict:
520 if key.startswith("__"):
521 continue
522 setattr(it, key, self.dict[key].__get__(it, self))
523 return it
524 class C(metaclass=M2):
525 def spam(self):
526 return 42
527 self.assertEqual(C.name, 'C')
528 self.assertEqual(C.bases, ())
529 self.assertIn('spam', C.dict)
530 c = C()
531 self.assertEqual(c.spam(), 42)
532
533 # More metaclass examples

Callers

nothing calls this directly

Calls 15

getstateMethod · 0.95
setstateMethod · 0.95
spamMethod · 0.95
myselfMethod · 0.80
assertInMethod · 0.80
assertNotHasAttrMethod · 0.80
CClass · 0.70
DClass · 0.70
EClass · 0.70
AClass · 0.70
cClass · 0.70
assertEqualMethod · 0.45

Tested by

no test coverage detected