![38% of CISOs Fear They’re Not Moving Fast Enough on AI](https://cdn.sanity.io/images/cgdhsj6q/production/faa0bc28df98f791e11263f8239b34207f84b86f-1024x1024.webp?w=400&fit=max&auto=format)
Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Simple overloading of methods and functions through an @overload decorator.
This module allows one to provide multiple interfaces for a functions, methods, classmethods, staticmethods or classes. See below for some notes about overloading classes, you strange person you.
The appropriate implementation is chosen based on the calling argument pattern.
For example:
class A(object): ... @overload ... def method(self, a): ... return 'a' ... @method.add ... def method(self, a, b): ... return 'a, b' ... a = A() a.method(1) 'a' a.method(1, 2) 'a, b'
The overloading handles fixed, keyword, variable (*args
) and arbitrary
keyword (**keywords
) arguments.
It also handles annotations if those annotations are types:
@overload ... def func(a:int): ... return 'int' ... @func.add ... def func(a:str): ... return 'str' ... func(1) 'int' func('s') 'str' func(1.0) Traceback (most recent call last): File "", line 1, in File "overload.py", line 94, in f raise TypeError('invalid call argument(s)') TypeError: invalid call argument(s)
This feature (and currently the module in general) requires Python 3.
The docstring and name (ie. documentation) of the resultant callable will match that of the first callable overloaded.
Overloading classes allows you to select a class type based on the construction arguments of each alternative type's new method.
There's a catch though: the new method must explicitly invoke the base class new method, rather than use super() like usual. This is because after being @overloaded the class is a function, and super() doesn't like being passed functions. So instead of::
@overload
class A(object):
def __new__(cls):
# this will fail because "A" is a function now
return super(A, cls).__new__(cls)
you must::
@overload
class A(object):
def __new__(cls):
# must explicitly reference the base class
return object.__new__(cls)
I'll leave it up to the reader to justify their use of @overloading classes.
See the end of the source file for the license of use.
I would be interested to know whether this module is useful - if you use it please indicate so at https://www.ohloh.net/p/pyoverload
FAQs
Simple overloading of methods and functions through an @overload decorator
We found that overload demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.