mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	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
 |