Python meta class and abstract method library with restrictions.
Project description
abcmeta
Python meta class and abstract method library with restrictions.
This library provides a restricted way to validate abstract methods.
The Python's default abstract method library only validates the methods
that exist in the derived classes and nothing else.
What this library provides is apart from that validation it provides
validations over the method's signature.
All you need is to import ABCMeta and abstractmethod from this library.
It works on both annotations and without annotations methods.
Installation
You can install the package by pip:
$ pip install abcmeta
Note: abcmeta supports Python3.6+.
Quick start
from typing import Dict, Text
from abcmeta import ABC, abstractmethod
class Base(ABC):
@abstractmethod
def method_2(self, name: Text, age: int) -> Dict[Text, Text]:
"""Abstract method."""
@abstractmethod
def method_3(self, name, age):
"""Abstract method."""
class Drived(Base):
def method_2(self, name: Text, age: int) -> Dict[Text, Text]:
return {"name": "test"}
def method_3(self, name, age):
pass
If you put a different signature, it will raise an error with 'diff' format with hints about what you've missed:
class Drived(Base):
def method_2(self, name: Text, age: int) -> List[Text]:
return {"name": "test"}
And it will raise:
Traceback (most recent call last):
File "/Workspaces/test.py", line 41, in <module>
class Drived(Base):
File "/usr/lib/python3.9/abc.py", line 85, in __new__
cls = super().__new__(mcls, name, bases, namespace, **kwargs)
File "/abcmeta/__init__.py", line 179, in __init_subclass__
raise AttributeError(
AttributeError: Signature of the derived method is not the same as parent class:
- method_2(self, name: str, age: int) -> Dict[str, str]
? ^ ^ -----
+ method_2(self, name: str, age: int) -> List[str]
? ^ ^
Derived method expected to return in 'typing.Dict[str, str]' type, but returns 'typing.List[str]'
For different parameter names:
class Drived(Base):
def method_2(self, username: Text, age: int) -> List[Text]:
return {"name": "test"}
And it will raise:
Traceback (most recent call last):
File "/Workspaces/test.py", line 41, in <module>
class Drived(Base):
File "/usr/lib/python3.9/abc.py", line 85, in __new__
cls = super().__new__(mcls, name, bases, namespace, **kwargs)
File "/abcmeta/__init__.py", line 180, in __init_subclass__
raise AttributeError(
AttributeError: Signature of the derived method is not the same as parent class:
- method_2(self, name: str, age: int) -> Dict[str, str]
+ method_2(self, username: str, age: int) -> Dict[str, str]
? ++++
Derived method expected to get name paramter, but gets username
Issue
If you're faced with a problem, please file an issue on Github.
Contribute
You're always welcome to contribute to the project! Please file an issue and send your great PR.
Support
If you find this project useful and want to support its development, consider buying me a coffee!
License
Please read the LICENSE file.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file abcmeta-2.2.1.tar.gz.
File metadata
- Download URL: abcmeta-2.2.1.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e044769670150fa56521d10a1a82bca1ae9e0cccce158d5e1189bb9b2c1cfa86
|
|
| MD5 |
95567383ce5a4394aba8fab500eca2c4
|
|
| BLAKE2b-256 |
eab36fd3ba3ced2fc69850ef66ff381255da402b49036f30ae45f70fdebac2d3
|
File details
Details for the file abcmeta-2.2.1-py3-none-any.whl.
File metadata
- Download URL: abcmeta-2.2.1-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
177a9d6a1c2e78116c1d8f02d93160b074b4201938ef8a2b2fb384be9aeeed73
|
|
| MD5 |
a13f8f68f30ccea41ef7928a57852ba4
|
|
| BLAKE2b-256 |
011b23d5f5f4fe13c9ef994e3d09b2660e7b49ed21258bcd11dbbec13033d7db
|