Predecessor
Overview
This set of libraries is intended to provide useful classes to inherit from, in a way that is cross compatible between multiple languages. A version of this library is currently available in:
Python (2 or 3)
Javascript
The libraries currently provide:
singleton objects
serializable objects
Singleton
The singleton class provides a way to ensure you only have one instance of a class. For instance:
from predecessor import Singleton
class Example(Singleton):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
a = Example(3, 8)
b = Example(2, 9)
a is b # returns True
a.foo == b.foo == 3 # returns True
Or equivalently in Javascript:
const Singleton = require('predecessor').Singleton;
class Example extends Singleton {
constructor(foo, bar) {
this.foo = foo;
this.bar = bar;
}
}
let a = new Example(3, 8);
let b = new Example(2, 9);
a === b; // returns true
a.foo === 3; // returns true
b.foo === 3; // returns true
Serializable
The singleton class provides a way to serialize a class without needing to care about what form the resulting blob takes. If a compatible class definition is available in all supported languages, it should be deserializable in all supported languages.
The Basic Case
from predecessor import Serializable
class Example(Serializable):
def __init__(self, foo, bar): # Note that keyword args are not supported
self.foo = foo
self.bar = bar
def serialized(self):
return super(Example, self).serialized(self.foo, self.bar)
a = Example(3, 8)
b = Example.deserialize(a.serialized())
a.foo == b.foo == 3 # returns True
a.bar == b.bar == 8 # returns True
Or equivalently in Javascript:
const Serializable = require('predecessor').Serializable;
class Example extends Serializable {
constructor(foo, bar) {
this.foo = foo;
this.bar = bar;
}
serialized() {
return super.serialized(this.foo, this.bar);
}
}
let a = new Example(3, 8);
let b = Example.deserialize(a.serialized());
a.foo === 3; // returns true
b.foo === 3; // returns true
a.foo === 8; // returns true
b.foo === 8; // returns true
Implied Serialization
In both languages, you can also use implied serialization. This looks like:
class Example(Serializable):
__slots__ = ('a', 'b', 'c')
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
class Example extends Serializable {
constructor(a, b, c) {
super();
this._slots = ['a', 'b', 'c'];
this.a = a;
this.b = b;
this.c = c;
}
}
Advanced Recombination
In both languages you can do data processing before feeding things into your constructor.
class Example(Serializable):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def serialized(self):
return super(Example, self).serialized(self.a, self.b)
@classmethod
def recombine(cls, a, b):
return cls(a, b, a+b)
class Example extends Serializable {
constructor(a, b, c) {
super();
this.a = a;
this.b = b;
this.c = c;
}
serialized() {
return super.serialized(this.a, this.b);
}
static recombine(a, b) {
return new this(a, b, a+b);
}
}
Metadata
Release files for predecessor 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| predecessor-0.0.3.tar.gz | 2.8 kB | Without provenance | Details for predecessor-0.0.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| predecessor-0.0.3-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details for predecessor-0.0.3-py2.py3-none-any.whl |
Total release size: 7.2 kB
Release files / predecessor-0.0.3.tar.gz
| Download URL | predecessor-0.0.3.tar.gz |
|---|---|
| Size | 2.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64d5681481d56765145c0c6afde07302405dca2d34acdd71650928890a8f73b1
|
|
BLAKE2b-256 checksum How to use checksums |
583879b3aa3eaa4caa654d0da932613825121a6266ba21d1ea32784a0d58e318
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / predecessor-0.0.3-py2.py3-none-any.whl
| Download URL | predecessor-0.0.3-py2.py3-none-any.whl |
|---|---|
| Size | 4.4 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
7c8def70350fa26bb5f3ceb049942d6eecc902f1c0fc7b057720c2efb02e8022
|
|
BLAKE2b-256 checksum How to use checksums |
218f7c45e1f57cd9e0d806f2df31b3d0104a890ab5430d9a6bea9d37c4554d80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for predecessor 0.0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.