Skip to main content

A Python package that provides a way to define private attributes in C++ implementation.

Project description

Private Attribute (c++ implementation)

Introduction

This package provide a way to create the private attribute like "C++" does.

All Base API

from private_attribute import (PrivateAttrBase, PrivateWrapProxy)      # 1 Import public API

def my_generate_func(obj_id, attr_name):                           # 2 Optional: custom name generator
    return f"_hidden_{obj_id}_{attr_name}"

class MyClass(PrivateAttrBase, private_func=my_generate_func):     # 3 Inherit + optional custom generator
    __private_attrs__ = ['a', 'b', 'c', 'result', 'conflicted_name']  # 4 Must declare all private attrs

    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
        self.result = 42                    # deliberately conflicts with internal names

    # Normal methods can freely access private attributes
    def public_way(self):
        print(self.a, self.b, self.c)

    # Real-world case: method wrapped by multiple decorators
    @PrivateWrapProxy(memoize())                                   # 5 Apply any decorator safely
    @PrivateWrapProxy(login_required())                            # 5 Stack as many as needed
    @PrivateWrapProxy(rate_limit(calls=10))                        # 5
    def expensive_api_call(self, x):                               # First definition (will be wrapped)
        def inner(...):
            return some_implementation(self.a, self.b, self.c, x)
        inner(...)
        return heavy_computation(self.a, self.b, self.c, x)

    # Fix decorator order + resolve name conflicts
    @PrivateWrapProxy(expensive_api_call.result.name2, expensive_api_call)    # 6 Chain .result to push decorators down
    @PrivateWrapProxy(expensive_api_call.result.name1, expensive_api_call)    # 6 Resolve conflict with internal names
    def expensive_api_call(self, x):         # Final real implementation
        return heavy_computation(self.a, self.b, self.c, x)


# ====================== Usage ======================
obj = MyClass()
obj.public_way()                    # prints: 1 2 3

print(hasattr(obj, 'a'))            # False – truly hidden from outside
print(obj.expensive_api_call(10))   # works with all decorators applied
# API Purpose Required?
1 PrivateAttrBase Base class – must inherit Yes
1 PrivateWrapProxy Decorator wrapper for arbitrary decorators When needed
2 private_func=callable Custom hidden-name generator Optional
3 Pass private_func in class definition Same as above Optional
4 __private_attrs__ list Declare which attributes are private Yes
5 @PrivateWrapProxy(...) Make any decorator compatible with private attributes When needed
6 method.result.xxx chain + dummy wrap Fix decorator order and name conflicts When needed

Usage

This is a simple usage about the module:

from private_attribute import PrivateAttrBase

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

print(hasattr(obj, 'a'))  # False
print(hasattr(obj, 'b'))  # False
print(hasattr(obj, 'c'))  # False

All of the attributes in __private_attrs__ will be hidden from the outside world, and stored by another name.

You can use your function to generate the name. It needs the id of the obj and the name of the attribute:

def my_generate_func(obj_id, attr_name):
    return some_string

class MyClass(PrivateAttrBase, private_func=my_generate_func):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

If the method will be decorated, the property, classmethod and staticmethod will be supported. For the other, you can use the PrivateWrapProxy to wrap the function:

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.attr_name, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(decorator3())
    def method2(self):
        ...

    @PrivateWrapProxy(method2.attr_name, method2) # Use the argument "method2" to save old func
    def method2(self):
        ...

The PrivateWrapProxy is a decorator, and it will wrap the function with the decorator. When it decorates the method, it returns a _PrivateWrap object.

The _PrivateWrap has the public api result and funcs. result returns the original decoratored result and funcs returns the tuple of the original functions.

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name1, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name2, method1)
    def method1(self):
        ...

    @PrivateWrapProxy(decorator3())
    def method2(self):

Advanced API

define your metaclass based on one metaclass

You can define your metaclass based on one metaclass:

from abc import ABCMeta, abstractmethod
import private_attribute

class PrivateAbcMeta(ABCMeta):
    def __new__(cls, name, bases, attrs, **kwargs):
        temp = private_attribute.prepare(name, bases, attrs, **kwargs)
        typ = super().__new__(cls, temp.name, temp.bases, temp.attrs, **temp.kwds)
        private_attribute.postprocess(typ, temp)
        return typ

private_attribute.register_metaclass(PrivateAbcMeta)

By this way you create a metaclass both can behave as ABC and private attribute:

class MyClass(metaclass=PrivateAbcMeta):
    __private_attrs__ = ()
    __slots__ = ()

    @abstractmethod
    def my_function(self): ...

class MyImplement(MyClass):
    __private_attrs__ = ("_a",)
    def __init__(self, value=1):
        self._a = value

    def my_function(self):
        return self._a

Finally:

>>> a = MyImplement(1)
>>> a.my_function()
1
>>> a._a
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a._a
AttributeError: private attribute
>>> MyClass()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    MyClass()
TypeError: Can't instantiate abstract class MyClass without an implementation for abstract method 'my_function'

Notes

  • All of the private attributes class must contain the __private_attrs__ attribute.
  • The __private_attrs__ attribute must be a sequence of strings.
  • You cannot define the name which in __slots__ to __private_attrs__.
  • When you define __slots__ and __private_attrs__ in one class, the attributes in __private_attrs__ can also be defined in the methods, even though they are not in __slots__.
  • All of the object that is the instance of the class "PrivateAttrBase" or its subclass are default to be unable to be pickled.
  • Finally the attributes' names in __private_attrs__ will be change to a tuple with two hash.
  • Finally the _PrivateWrap object will be recoveried to the original object.
  • One class defined in another class cannot use another class's private attribute.
  • One parent class defined an attribute which not in __private_attrs__ or not a PrivateAttrType instance, the child class shouldn't contain the attribute in its __private_attrs__.
  • When combine with other metaclass, be ensure that the parent metaclass has no classmethod that can set subclasses' attributes. If it has, it will fail on new metaclass because the new metaclass you defined and registered will be immutable.

License

MIT

Requirement

This package require the c++ module "picosha2" to compute the sha256 hash.

Support

Now it doesn't support "PyPy".

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

private_attribute_cpp-1.2.8.tar.gz (25.7 kB view details)

Uploaded Source

Built Distributions

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

private_attribute_cpp-1.2.8-cp314-cp314t-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.8-cp314-cp314t-win32.whl (70.0 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.8-cp314-cp314t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp314-cp314t-macosx_11_0_arm64.whl (81.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.8-cp314-cp314-win_amd64.whl (83.8 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.8-cp314-cp314-win32.whl (68.5 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.8-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp314-cp314-macosx_11_0_arm64.whl (79.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.8-cp313-cp313t-win_amd64.whl (83.9 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.8-cp313-cp313t-win32.whl (68.1 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.8-cp313-cp313t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp313-cp313t-macosx_11_0_arm64.whl (81.2 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.8-cp313-cp313-win_amd64.whl (81.8 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.8-cp313-cp313-win32.whl (66.7 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.8-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp313-cp313-macosx_11_0_arm64.whl (79.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.8-cp312-cp312-win_amd64.whl (81.8 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.8-cp312-cp312-win32.whl (66.7 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.8-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp312-cp312-macosx_11_0_arm64.whl (79.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.8-cp311-cp311-win_amd64.whl (81.5 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.8-cp311-cp311-win32.whl (66.5 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.8-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp311-cp311-macosx_11_0_arm64.whl (79.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.8-cp310-cp310-win_amd64.whl (81.5 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.8-cp310-cp310-win32.whl (66.5 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.8-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.2.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.2.8-cp310-cp310-macosx_11_0_arm64.whl (79.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file private_attribute_cpp-1.2.8.tar.gz.

File metadata

  • Download URL: private_attribute_cpp-1.2.8.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for private_attribute_cpp-1.2.8.tar.gz
Algorithm Hash digest
SHA256 f9f1e5a0333cc32e1802d6a047f842334ccabec9b5c436468d9e2ed6a33a10ee
MD5 762f62e6249a6e73e6d0aca3e8d66134
BLAKE2b-256 7aecb75a291810fdb6a7ac5a0646304ac5f5d988fda94cd3626275eaa7c41d22

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 5211f35f542e1c9b066be5c70acf6b4493c1e42b0469a447b81746e0ba33921d
MD5 3b68752970d66beba6c43daafd708337
BLAKE2b-256 e46f3114a5afd12c6e2d695fddea8564e52de802fb25c5e1b5751965d1679108

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314t-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 b1aca2effb3040be746001f40b239a6ea4e8219acac4144653ddfdd828b97884
MD5 d85228b7c9e4cdd03877fc133b4d96c6
BLAKE2b-256 dba746cdda69baea55e80140b589289d9aa7f06deb9e3580252ef8f16fc5ecf8

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 06a2c99549a52d1b04a6646f7e09479912b5832cf7ebd0c4b1585c64350b6222
MD5 ea017d4c807dde272a2cdcde9521734c
BLAKE2b-256 9c96c8cb233ab1761d7f869b83b55d1f9866a0dceb61525c099187fc3ad94d02

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f8e96893f23df6a286b184ba9e6f433c2705f0f07950ad8536a22afc343ea7a
MD5 30c805ac82c07ea974431860d9a5340c
BLAKE2b-256 4f4d326f0c01fd78737103d8a303dbb21deb11e94683ac2838e984977fa35607

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ea4b0ff4213cdd31fa0040f27fb0be140edb00cfd34b507273d3ba939213fd5d
MD5 3fa8bce7135f660fafd9e2cc1681329c
BLAKE2b-256 ed2cf675a1adbb46d4c178ad6c33afb466e268abba6c7ffda9204ef1b980bf1e

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8659918df0c0876da84d62cc196edb88b5112eda5ff6405cdc76d7ab04fd7411
MD5 46f9e67727f776c4e15c781a470f75cc
BLAKE2b-256 aa11bf833a97ad68646cd5542d67be87d4b2dc361618fe32fd4a2201ecb31fc4

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 c648148df69ccb74a164d4e8e5179ea63ea32b9561c5181e26f1b00d5ffa3207
MD5 16ef21080a51da8bd18e76ccff502f1a
BLAKE2b-256 47b9c10cfb8f9d5dc87021c01e67fa75ca6e04c7fc384fc413ee9b85bf799a93

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a265fccaeb2126b42ca09d260d4f3f217ed3a275abe5c6d9a4e1e76dc7eb794d
MD5 f01cffb7b741f74a7e13a8f435712cae
BLAKE2b-256 2bcd8c908a08f5da891f8f3552f9fdc22fb6f25de879e11ee616361ee51a92fe

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55a20f20e4f1281a3d440ad29ae8cf9ddb077b03af21392084dd8c1b020ce98a
MD5 dba638632259e8e27ea44e0bb774eddc
BLAKE2b-256 4bc8f3ac98a1f72253ddc7dd20a18fde6b550de59b8449d212561606bd454c7e

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6997c6ce36f9de39b36d20c66f2abc10675b6f4df21f70c2061c06d25ec7f665
MD5 f8671ed62c09a6d1c548f2c314563f53
BLAKE2b-256 5f21b19c6523b3b28ed4a03d61e6ea93ba0dbee04a8c6474a6ca26ee439d84fc

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 1d88de1ecbf2a70a62c0b19d2685d99f97dbd844bfa2d3ac23281f14a3a077a5
MD5 c1203b4b7393b95b88e0f51a929260c2
BLAKE2b-256 aeab575dcffef15cb6c14a203d829c9374509ea94b9274480500cbb5ac32c284

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313t-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 63e898b647b96d0890284f141675a08a66c203cb02f986f88039ed8a25340471
MD5 5528850ef8bd2c1c9c1cb609bdaaf01e
BLAKE2b-256 d9d9a493106eb2f7c5b4d4642db0d574bc9ea682d650516d682a8e39bc7d30fa

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e939790ca8f96f0c0ebdd2d9b3bf04e8101d2b1c8e35c8d027962337b5a2f771
MD5 4a703b3cac1ea5ff460f160053cdebaa
BLAKE2b-256 54fd4c8738a3e4c5c05c971b4aa63d1c8b652e33b3fa99a60d2e2702327f57aa

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 80da2ce5ba01671761d34cfddb7a652930f0dbf1457447ede16754ecea88f86b
MD5 746ac1885e6ed37cc6840df9b1e18f59
BLAKE2b-256 b6c76238eaad0d60a74c2ea63610697530a5be092020947ea1b9e3cbc37f9bf4

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac92a736ddbadbf2000aff41a1a807ff39beb4e51859e527f09dbca5fb92d93e
MD5 22d050f8e40554262c2e019c9036485f
BLAKE2b-256 209cbe729f9b3bb1030efe6be4da033e5b96139af141505f4523d801e72d1c0f

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2fa11e285123c5dbc47608341585517621d80768dcadcd063e59c6be70833a42
MD5 6a775735cd2233f9c0b59c754a2f10c4
BLAKE2b-256 82542e409ede0903c0fbe2a95c1c900003a7f934568123c99301d7fd3827b056

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 18a17b47430e7bb060ec81bf06ed61d96ac0e1f8abbea00179b171c8457ef600
MD5 e7e4167f3022eec0360f7534dc06d75b
BLAKE2b-256 05aa49c6f8fe54e9b2ca952711bdfdefc67c30571ec2221c4d7b9d4bf1fe1853

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ee0bc67dbce3344e46a1ed20ddacd3976d9b7ca39561a7e8c7b4684f223112ee
MD5 1cef735ef0b990929129d2657f68623e
BLAKE2b-256 0ced3a6480816f2e2f22fb1eaeb8132cc1aad312ae54ea5d82ade2550c683bca

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6db308da40d491004210a62ddb43cfbc78afcafa3c4bf2d8f1871ec8f89e247f
MD5 efd63bc7264d87227707de2e18e68709
BLAKE2b-256 81d9639b719151143313aa82c1016577f606dbec891b05766dea3be8147aa41a

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 22e56c6818de2ddb6c42d7167b3df486abca88950fa36b57449d429995a3458b
MD5 3e6fc1fd55bc38763b93e6b224abea75
BLAKE2b-256 2827f493f693ce2626a80ad8015a52472285f51f7e444dfa50773f2bdb588045

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1c2523a5b28da4136f56233ba6811de4f7e4b7a93575968af33908075db28c3f
MD5 14d3cb7aecd70049bd89130643b6bd7b
BLAKE2b-256 feefcc844736aa39b0816ab22c180e113b0cb8bdb842cdcf9641e265781056ed

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 060e53f28e36dc73ce82a89d298f73ca2bbec0983a943d7b07493b70b14a251f
MD5 b645f34bcf886c11997398d80da99e3a
BLAKE2b-256 3d542748b07b9177a59eeb8e7f984a25b985fa25bb6aba9af0853af64a4fbcaa

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bf4dce647c41e94d0b4ec93312b780f6ce76ce90c6acaef8df27381f28ae3ec4
MD5 5ba7d693b27f679c82c1584279862a30
BLAKE2b-256 e5109fa92a96d82bc41ecdf65ea63d48c0a49df241596df33d98ae601c1efbaf

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c33381efb632652873e31ecacb5e6b93ff7dc518f8c96e38e7ab788aebf9d8b0
MD5 1aeededbc1821c2262a1bf4ce090e6e7
BLAKE2b-256 15a86e4436b3ebfa37cc2f73ed05da19d19b63fe24fe57e1822a9045faf9a3ba

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f7219631dc44157aa8b2c3e2c319a0cddfa921a35bf8022c34397464c20e6ef8
MD5 82c13588ad3949a36c7bec7eaf3cee8e
BLAKE2b-256 9bb72d1859dc77454efe37d5e497f5140b09ccf9d176441fac9c79402682ed0c

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 541f3b7017e15d91e27fd5250120a75cdbef9b6da5014e2c18c41b5dd233adc0
MD5 f1710f9801f646767cf2d420b45e45ea
BLAKE2b-256 cfdc90670af91583b3b52b277ada1d4a0253609429a7bb6dfc5951fc124eabe9

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 b0f30a1dc9cb08fd27066b3307bafe29922aa9d7469b1f38e0db0aa1a375f6e1
MD5 9f6e4d1584c891f4abb7a76568c12f81
BLAKE2b-256 848264590f7dcd6bc4c90cf66e153669b62ca9b88f4d28fc4f12c7159472da5e

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9021041f95653bb6ba9b34355c5b07b9819d939919d376c8d4089a209e490b41
MD5 815382cbe349b54411517a19a8fad979
BLAKE2b-256 521e6df475925e7a1daba3b81a2454c0d4b7b39292a17f202c09959948ae99c2

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 477aba2bd88afcdace84c7e6aac31ce73857f134a4bad0548daecbb483cc4f7d
MD5 2f48cab4dcf3979922e08a39a6df53d7
BLAKE2b-256 44357f3fcbf2778de92c50dde3e978988b23265502ee01d2722753a9e61b825e

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7cbfd777a640d085c98f6a7023a3395d5edbce6bd9c71bf9ede924d0778ab8ed
MD5 1cae518025fb6b00b289041100a2bc9d
BLAKE2b-256 ae6c9437633a3277535f2870fd819f3b4f7692822f2546aec4224ab2472f9135

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8b1f3467709efda1d4a55f842c02de80771eedb3de6d82daa089d2c218e64c67
MD5 b6d078427833e06cee499a3608138d82
BLAKE2b-256 6aeabb1756f146ecd92a0f8ea5ba6e9eac4b42bf1d5820ccdd60b35c46bc1124

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 7f43c712c90da187d4ea95feef89268a0eabb3cb5ac67d924b106ae6114f709e
MD5 065041fed8f9604dc9a09b391aa62b19
BLAKE2b-256 a515bce1ac14ec4eb37f655be2d8937ac6a5cbfe59e55308fcd86938e77728c0

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d7725c28a533c1e8ad99b168244b193282e9391ed030fcc9f69a70747d60afa5
MD5 8ebb65de595216b4719bf747ac8c2b6a
BLAKE2b-256 6315ae907687e6f4afcc0323ff8d2cc50ac327ca5e6ae030328096757660f52a

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ca5b50c10a4217fb2dd19513dac45f77c967ba7f4e72e758ef1c71835d992949
MD5 7aac11c67920b1c76a20139f7b9e5224
BLAKE2b-256 0108f3f106f7d3bfc99d310229d8da0f416c796984aa631f13bb05289e23a0ea

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-1.2.8-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6148093e9d4fde011763f8b07d62846964c5d1dab241141e1039f26ccd62da5e
MD5 626808af18976e32eef0daa7cd75210b
BLAKE2b-256 17b8481be4fff2870e8d48e8b1b01e65a8b40a67083dc23484346b164d63a3ba

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