mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 219d8d24b5
			
		
	
	
		219d8d24b5
		
			
		
	
	
	
	
		
			
			Doing this was always the intention. I was finally motivated to find the time to do it. See #87859 (comment).
		
			
				
	
	
		
			120 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # This may be loaded as a module, in the current __main__ module,
 | |
| # or in another __main__ module.
 | |
| 
 | |
| 
 | |
| #######################################
 | |
| # functions and generators
 | |
| 
 | |
| from test._code_definitions import *
 | |
| 
 | |
| 
 | |
| #######################################
 | |
| # classes
 | |
| 
 | |
| class Spam:
 | |
|     # minimal
 | |
|     pass
 | |
| 
 | |
| 
 | |
| class SpamOkay:
 | |
|     def okay(self):
 | |
|         return True
 | |
| 
 | |
| 
 | |
| class SpamFull:
 | |
| 
 | |
|     a: object
 | |
|     b: object
 | |
|     c: object
 | |
| 
 | |
|     @staticmethod
 | |
|     def staticmeth(cls):
 | |
|         return True
 | |
| 
 | |
|     @classmethod
 | |
|     def classmeth(cls):
 | |
|         return True
 | |
| 
 | |
|     def __new__(cls, *args, **kwargs):
 | |
|         return super().__new__(cls)
 | |
| 
 | |
|     def __init__(self, a, b, c):
 | |
|         self.a = a
 | |
|         self.b = b
 | |
|         self.c = c
 | |
| 
 | |
|     # __repr__
 | |
|     # __str__
 | |
|     # ...
 | |
| 
 | |
|     def __eq__(self, other):
 | |
|         if not isinstance(other, SpamFull):
 | |
|             return NotImplemented
 | |
|         return (self.a == other.a and
 | |
|                 self.b == other.b and
 | |
|                 self.c == other.c)
 | |
| 
 | |
|     @property
 | |
|     def prop(self):
 | |
|         return True
 | |
| 
 | |
| 
 | |
| class SubSpamFull(SpamFull):
 | |
|     ...
 | |
| 
 | |
| 
 | |
| class SubTuple(tuple):
 | |
|     ...
 | |
| 
 | |
| 
 | |
| def class_eggs_inner():
 | |
|     class EggsNested:
 | |
|         ...
 | |
|     return EggsNested
 | |
| EggsNested = class_eggs_inner()
 | |
| 
 | |
| 
 | |
| TOP_CLASSES = {
 | |
|     Spam: (),
 | |
|     SpamOkay: (),
 | |
|     SpamFull: (1, 2, 3),
 | |
|     SubSpamFull: (1, 2, 3),
 | |
|     SubTuple: ([1, 2, 3],),
 | |
| }
 | |
| CLASSES_WITHOUT_EQUALITY = [
 | |
|     Spam,
 | |
|     SpamOkay,
 | |
| ]
 | |
| BUILTIN_SUBCLASSES = [
 | |
|     SubTuple,
 | |
| ]
 | |
| NESTED_CLASSES = {
 | |
|     EggsNested: (),
 | |
| }
 | |
| CLASSES = {
 | |
|     **TOP_CLASSES,
 | |
|     **NESTED_CLASSES,
 | |
| }
 | |
| 
 | |
| 
 | |
| #######################################
 | |
| # exceptions
 | |
| 
 | |
| class MimimalError(Exception):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| class RichError(Exception):
 | |
|     def __init__(self, msg, value=None):
 | |
|         super().__init__(msg, value)
 | |
|         self.msg = msg
 | |
|         self.value = value
 | |
| 
 | |
|     def __eq__(self, other):
 | |
|         if not isinstance(other, RichError):
 | |
|             return NotImplemented
 | |
|         if self.msg != other.msg:
 | |
|             return False
 | |
|         if self.value != other.value:
 | |
|             return False
 | |
|         return True
 |