When running dir() to DelphiVCL library or any DelphiVCL methods and properties in all previous sections, you might find many of Python’s built-in objects and properties. Previously, we already discussed about __doc__, __file__, __loader__, __name__, __package__,__spec__, __class__, __contains__, __delattr__, __dir__, __eq__, __format__, __ge__, __getattribute__, __getitem__, __gt__, __hash__, __init__, __init_subclass__, __iter__, __le__, __len__, __lt__, __ne__, __new__, __reduce__, and, __reduce_ex__.
Here are more built-in function objects inside the DelphiVCL library and their descriptions:
Table of Contents
__repr__: object.__repr__(self)
Called by the repr() built-in function to compute the “official” string representation of an object. If at all possible, this should look like a valid Python expression that could be used to recreate an object with the same value (given an appropriate environment). If this is not possible, a string of the form <…some useful description…> should be returned. The return value must be a string object. If a class defines __repr__() but not __str__(), then __repr__() is also used when an “informal” string representation of instances of that class is required.
This is typically used for debugging, so the representation must be information-rich and unambiguous.
__rmod__: object.__rmod__(self, other)
These methods are called to implement the binary arithmetic operations (+, -, *, @, /, //, %, divmod(), pow(), **, <<, >>, &, ^, |) with reflected (swapped) operands. These functions are only called if the left operand does not support the corresponding operation and the operands are of different types. For instance, to evaluate the expression x – y, where y is an instance of a class that has an __rsub__() method, y.__rsub__(x) is called if x.__sub__(y) returns NotImplemented.
Note that ternary pow() will not try calling __rpow__() (the coercion rules would become too complicated).
Additional Note: If the right operand’s type is a subclass of the left operand’s type and that subclass provides a different implementation of the reflected method for the operation, this method will be called before the left operand’s non-reflected method. This behavior allows subclasses to override their ancestors’ operations.
__rmul__: object.__rmul__(self, other)
These methods are called to implement the binary arithmetic operations (+, -, *, @, /, //, %, divmod(), pow(), **, <<, >>, &, ^, |) with reflected (swapped) operands. These functions are only called if the left operand does not support the corresponding operation and the operands are of different types. For instance, to evaluate the expression x – y, where y is an instance of a class that has an __rsub__() method, y.__rsub__(x) is called if x.__sub__(y) returns NotImplemented.
Note that ternary pow() will not try calling __rpow__() (the coercion rules would become too complicated).
Additional Note: If the right operand’s type is a subclass of the left operand’s type and that subclass provides a different implementation of the reflected method for the operation, this method will be called before the left operand’s non-reflected method. This behavior allows subclasses to override their ancestors’ operations.
__setattr__: object.__setattr__(self, name, value)
Called when an attribute assignment is attempted. This is called instead of the normal mechanism (i.e. store the value in the instance dictionary). name is the attribute name, value is the value to be assigned to it.
If __setattr__() wants to assign to an instance attribute, it should call the base class method with the same name, for example, object.__setattr__(self, name, value).
For certain sensitive attribute assignments, raises an auditing event object.__setattr__ with arguments obj, name, value.
__sizeof__: Used in getsizeof() or sys.getsizeof(object[, default]).
Return the size of an object in bytes. The object can be any type of object. All built-in objects will return correct results, but this does not have to hold true for third-party extensions as it is implementation-specific.
Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.
If given, the default will be returned if the object does not provide the means to retrieve the size. Otherwise, a TypeError will be raised.
getsizeof() calls the object’s __sizeof__ method and adds an additional garbage collector overhead if the object is managed by the garbage collector.
__str__: object.__str__(self)
Called by str(object) and the built-in functions format() and print() to compute the “informal” or a nicely printable string representation of an object. The return value must be a string object.
This method differs from object.__repr__() in that there is no expectation that __str__() return a valid Python expression: a more convenient or concise representation can be used.
The default implementation-defined by the built-in type object calls object.__repr__().
__subclasshook__:
Abstract class can override __subclasshook__() method to customize issubclass(). It returns True when a class is found to be a subclass of an ABC class, it returns False if it is not and returns NotImplemented if the subclass check is continued with the usual mechanism. This method is defined in the ABC class with some conditions. Classes that follow those conditions are considered to be a subclass.
Note: It must be defined as a class method.
Here is an example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from abc import ABCMeta class A(metaclass = ABCMeta): @classmethod def __subclasshook__(cls, C): if cls is A: # condition to check if the # function anyfun() is present # in any sub class or not if any("__anyfun__" in Q.__dict__ for Q in C.__mro__): return True return False class P(object): pass class Q(object): def __anyfun__(self): return 0 # Driver's code print(issubclass(Q, A)) print(issubclass(P, A)) |
Output:
Check out DelphiVCL which easily allows you to build GUIs for Windows using Python.