Skip to main content

No project description provided

Project description

Python++

PyPI Deployment Unit Tests

A robust Java-style OOP system for Python, with support for statics, encapsulation, and inheritance.

View on PyPI / Built by Kento Nishi and Ronak Badhe

Python++ allows Python programmers to use object oriented programming principles in Python.

Installation

The package is available on PyPI. You can install the package with the following command:

pip install pythonpp

Usage

Importing the Library

You can import Python++ with the following:

from pythonpp import *

Class Declaration

Declare Python++ classes with the @PythonPP decorator.

@PythonPP
class MyClass:
    pass # class code here

Namespace and Scopes

Declare variables and methods for Python++ classes within namespace.

@PythonPP
class MyClass:
    def namespace(public, private):
        pass # methods and variables here

Code within namespace has access to the following scopes:

Scope Description
public The public instance scope.
private The private instance scope.
public.static The public static scope.
private.static The private static scope.

Static Initializers

Declare static initializers for Python++ classes using the @staticinit decorator. Static initializers do not have access to instance variables and methods. Static initializers cannot have input parameters.

@PythonPP
class MyClass:
    def namespace(public, private):
        @staticinit
        def StaticInit():
            public.static.publicStaticVar = "Static variable (public)"
            private.static.privateStaticVar = "Static variable (private)"

Alternatively, static variables can be declared in the bare namespace if the variable assignments are constant. Using bare static variable declarations are not recommended.

Constructors

Constructors can be declared using the @constructor decorator. Constructors can have input parameters.

@PythonPP
class MyClass:
    def namespace(public, private):
        @constructor
        def Constructor(someValue):
            public.publicInstanceVar = "Instance variable (public)"
            public.userDefinedValue = someValue

Method Declarations

Methods are declared using the @method(scope) decorator with the public and private scopes in namespace.

@PythonPP
class MyClass:
    def namespace(public, private):
        @method(public)
        def publicMethod():
            pass # public instance method here

        @method(private)
        def privateMethod():
            pass # private instance method here

        @method(public.static)
        def publicStaticMethod():
            pass # public static method here

        @method(private.static)
        def privateStaticMethod():
            pass # private static method here

Special Methods

Declare special built-in methods using the @special decorator.

@PythonPP
class MyClass:
    def namespace(public, private):
        @special
        def __str__():
            return "Some string value"

Inheritance

Classes can extend other classes using standard Python class inheritance.

@PythonPP
class ParentClass:
    def namespace(public, private):
        @staticinit
        def StaticInit():
            public.static.staticVar = "Static variable"

        @constructor
        def Constructor(param):
            print("Parent constructor")
            public.param = param

@PythonPP
class ChildClass(ParentClass): # ChildClass extends ParentClass
    def namespace(public, private):
        @staticinit
        def StaticInit():
            ParentClass.staticinit() # Call parent static initializer
            public.static.staticVar2 = "Static variable 2"

        @constructor
        def Constructor(param):
            # Call parent constructor
            ParentClass.constructor(param)

Quickstart Example

from pythonpp import *

@PythonPP
class ParentClass:
    def namespace(public, private):
        @staticinit
        def StaticInit():
            public.static.publicStaticVar = "Public static variable"
            private.static.privateStaticVar = "Private static variable"

        @constructor
        def Constructor(parameter):
            private.privateVariable = parameter

@PythonPP
class ChildClass(ParentClass):
    def namespace(public, private):
        @staticinit
        def StaticInit():
            ParentClass.staticinit()

        @constructor
        def Constructor(parameter):
            ParentClass.constructor(parameter)
            public.publicVariable = "Public variable"
            private.privateVariable = "Private variable"

        @method(public)
        def getPrivateVariable():
            return private.privateVariable

        @method(public.static)
        def getPrivateStaticVar():
            return private.static.privateStaticVar

        @special
        def __str__():
            return "ChildClass object"
print(ChildClass.publicStaticVar)
# > Private static variable
print(ChildClass.getPrivateStaticVar())
# > Private static variable

obj = ChildClass("Parameter value")
print(obj)
# > ChildClass object
print(obj.publicVariable)
# > Public variable
print(obj.getPrivateVariable())
# > Parameter value
try:
    obj.privateVariable # results in an error
except Exception as e:
    print(e)
# > 'ChildClass' object has no attribute 'privateVariable'

Full Example

You can view the full example Jupyter notebook here.

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

pythonpp-2.2.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pythonpp-2.2-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file pythonpp-2.2.tar.gz.

File metadata

  • Download URL: pythonpp-2.2.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for pythonpp-2.2.tar.gz
Algorithm Hash digest
SHA256 d023b372c49619515290a985016489a68c16d0ab3a1a7fc4c9d14f1e51b9af5e
MD5 e24c62d3a4f15d12023ceb9be3bb6208
BLAKE2b-256 440de31e50e53422b41b2639c09a2b38ec027f25dea74010ee628bec3b6ec30a

See more details on using hashes here.

File details

Details for the file pythonpp-2.2-py3-none-any.whl.

File metadata

  • Download URL: pythonpp-2.2-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for pythonpp-2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4d0878398a928adca479a13738384608f54a6bebc8f7e56e72bde0f03082180f
MD5 07d892b9a2c71c73bc868940df160612
BLAKE2b-256 fb931010a57f4647efb50224eb40eb6d51d59dc409388ebe18f2c0548aee1f7b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page