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__.

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.7.tar.gz (25.3 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.7-cp314-cp314t-win_amd64.whl (85.4 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.7-cp314-cp314t-win32.whl (69.4 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp314-cp314t-macosx_11_0_arm64.whl (80.9 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.7-cp314-cp314-win_amd64.whl (83.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.7-cp314-cp314-win32.whl (67.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp314-cp314-macosx_11_0_arm64.whl (79.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.7-cp313-cp313t-win_amd64.whl (83.3 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.7-cp313-cp313t-win32.whl (67.5 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp313-cp313t-macosx_11_0_arm64.whl (80.9 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.7-cp313-cp313-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.7-cp313-cp313-win32.whl (66.1 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp313-cp313-macosx_11_0_arm64.whl (79.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.7-cp312-cp312-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.7-cp312-cp312-win32.whl (66.1 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp312-cp312-macosx_11_0_arm64.whl (79.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.7-cp311-cp311-win_amd64.whl (81.1 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.7-cp311-cp311-win32.whl (65.9 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp311-cp311-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.7-cp310-cp310-win_amd64.whl (81.1 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.7-cp310-cp310-win32.whl (65.9 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.7-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.7-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.7-cp310-cp310-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.7.tar.gz
  • Upload date:
  • Size: 25.3 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.7.tar.gz
Algorithm Hash digest
SHA256 5c3cbbf7a5ee4698c23233c8467ff3ba769bbd3067b7de301cf97aeca4e50355
MD5 0ec90969ef2abd16ad53752798773d5e
BLAKE2b-256 15d8625718fa57319d50adb4f119e1131a1462ad6aa7ef4d384867457b7e501a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 cd5c1fc1717f9e2328ba08700156ea293856c4a0eb9828babd6e25f39b363104
MD5 0de9e34c53314a769a68c1c44712f491
BLAKE2b-256 10df188d24cb91c9ba0107702d5b07905011d43ce16cc4079dacdfcdee6fb66a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 e52c5d295e662750285db36d18474975dd7cba09a81e9a5277fb8aaf9b539477
MD5 70ad6fe1507e91f94e7b840230cab00b
BLAKE2b-256 916afc5c2e17c9dc3e679a1ab1cdae54f99b12cab6d48ca9b010bd5728672c32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4f106dc5f82dc2cb7613bc7ee27539e45e17055e69cb68c6efb0e17862467304
MD5 7c1e0e242d56690099e86473a9066091
BLAKE2b-256 b2602444a49240a4264cfc9d904ef9a8e54f9c22bc813ddd91c8a61236aedcd1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8d73fabf64f03b71e4dc92fb6f9edab8c5e6cf4db3decc702c41c094719acf56
MD5 ca8533bcc6bd7ed388d93f872291a75e
BLAKE2b-256 4830f6834827d12ea90e32cf5085651707f3a3d65f075454240fc83ed1704a39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee180b6cc5183201931e5ab0cf82e0cd5cfbfc6c4336158a3f8b1010e186ed03
MD5 ad8493bd62a4f0397aea3d7c09cf6b6c
BLAKE2b-256 860d78236d373d18badfd8124cec1345ddb92d2574fd87ed62f5a9f8c40e3a06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4ae88a0cab802e7220a387a95fb439845aac46fa79306db65f509bfc549538aa
MD5 dc879f6835c4e25b4a91338c7989a447
BLAKE2b-256 12cde2bba9a30cfbdcb40c5597b7dfd501fffa1c919f938cd8f8de85bb48addb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 1d7a8be8a7e70e304c538a8edafe3e583e4dd5dfb99f13bcc7c645da28bbeae2
MD5 0026a6f9bb466c32e45029aa3f8847fa
BLAKE2b-256 fe695839877d11b3e979869c0eb931e1145ef5806b14b4015b4b644d80349b5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5a7d2c75925740026d643cafd9b6d927a2e706dd98664ae1612aece7bbe7365c
MD5 6873f457d323afd8175f9f2c49338366
BLAKE2b-256 4a60e81cac48a07525a800fb10fd923d37b42d25337b28da3cfda67615fb4904

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5ccae8eb3abdb115921a94e56fb0eb8794af79cf174a6ffef4adb56dbd12faf6
MD5 7f66d02727f23b09f368aedc7805cc52
BLAKE2b-256 fcfd3c677f39f2cbb95b7cd4c1861b753ac59a95a17fe74ad092918809e3c2d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2f17b028f306305d521d6908c1ba0425c5af724460445f25a0a3344e6c751fcc
MD5 17b67715af6d31d95e96bfb279f21d88
BLAKE2b-256 62e234f49571afec45d37d5d92edbb6680136312aeb30a49751c2b013f414d5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 dcc542bc6d11307958a15089d7f67b493e8a1f88874f17178bbc4d3d12c7617b
MD5 1b6ad1581954d4364b627e1f72eff5f2
BLAKE2b-256 12987f851c6e9fa2411a8f48f88725f1bd2e40d14d8c4cd9d90a53a3e2472a06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 f3a5ec3d2b61042b6137cb6cc5c7f492f79b4532ded388226c05155505d0b084
MD5 b73ebb5c9d272da6933fa8be85883992
BLAKE2b-256 a9be4bd2df1cc4ec500a988b0997764bcf5e2232f0867cfe2a81822ae92428fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0a2f912fa7b70d83a38805ef1c00c2cdf04b7ccdccc8d71b0e312badfb0eaee7
MD5 1b363dbda1272a0435adebd318571b2f
BLAKE2b-256 8ef70b685aa4135b8af0a64e5feefcf300da8e567ce7f43b54501d985c972089

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e06e19b0f99747dda86fd2511128e4787de76e9c7dd2fd4b39c1a343176cc629
MD5 3625a8b270f48d1ef03ed08259250aa6
BLAKE2b-256 505ceb95871bc6e2ece7c4cd2bfe87d816ea8ec7697c7cf33eb1cbba116576fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad76f6a3895492fe45b5daf98f0d84db64ac6a4553aca5fff7678f10d9e99915
MD5 381883c333238e7cd7c4115fd2dad0b2
BLAKE2b-256 9f306688e28f2dfbd7bda819901c2cfee7a2d42ae4c94594aa9e21204e4848c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0592280dca1e99a2db533d70e3d63a2c9079d5c8863b9a68e9748b66eef949e4
MD5 a49234dfea9a1f0f3429cdd28513e68c
BLAKE2b-256 250eb5cfc48beb1854557406f475a19af1d470971deec6555bd26fa2c10df26c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 fa5cecd2fa6d0b6fa3b0da7ce715c9b2f0c44d3520ee7bd59dfcb8243349dffe
MD5 1765db36b95325124f89f3cb671c39f3
BLAKE2b-256 245c361cfb6aeebd01f31354fee7b9f8691856c5038c6dcf02c911045ddb2a62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c08c81b02c6c174aad61b974ad758ff3bc457b1ee89a1e87a85fbd8e4394c8f1
MD5 5d16917268f76b2bc79a2c8962488ae1
BLAKE2b-256 6770d239932b30eed60571c0d5104526f2deb16580d05457736bc2b6064125e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 135fbff48c7b4cbe2be20b15d473a476a158e4467f27e4c7034f4f53abc07183
MD5 71845cd453944224791cd80fadfb02ba
BLAKE2b-256 15a34aec0e8e0f1641b29c804f34bb3709e6259df8957deed06d757ca9f7b65b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b06c0fd58146d1ed566c20e403e1fc62338c78c290e6489dc33a768af32a548e
MD5 0cbb30622847771fa3da7d76dea2c1d4
BLAKE2b-256 d2f0ac1c72216223adb8a6db195b382a29c52b3d37cb5cc32cfc1f7cadb38445

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7298c841e8029fd80a61ba5c179a1939f8e90d15d68dd2600ce751811f5c4050
MD5 b152f737a41d97d11e8c2d3d1344b25e
BLAKE2b-256 5a08dc1cd2e7ba51a2ffdadfdda7f8db6c11ab8bab76350b633dfd3e2c2db604

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 59d18f0b7ba894537d01b92ef3f07f0418b376850da64efe56f1463b2cf12d69
MD5 74286a04d21c6b731c2aa72b4d0248e3
BLAKE2b-256 75ff901caff6a6b7e0ff0f95c02262d04eb9934a1e6006b08373473a0227856e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9a40ba37b996167daebdbe318fb8713a3054897962f75fa6059a7c078142c4ab
MD5 2e8212bed49de801c6b2a93aee77ee3c
BLAKE2b-256 189d86e228ded89f0a9c10d1e7552332fda4f7fd8077cd7e1f61a2495bb0a9ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 35fa947489fa8db74cba04f4576e2494002ffcd93f1d7343400a7a332d641e77
MD5 88dddb4efb8168aaf2b49ac24cae1b54
BLAKE2b-256 189add2125fd147802bc5e67217aeea6e8e2be69f7159a444b727a15c205d67c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 047fecefb91546800f7bdbabc8c5b3950f82935e2072f2f1d01c223ca7688550
MD5 bfd76e8840fccd29f0c86ef90655a375
BLAKE2b-256 720adba5c6feb1c0624bb17c9cd8ac18bf9a3e1c2488c8295cb31a749b38c0d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7ef20a78c97059f9890f206fd058a0849cf54ff45931cbba5fb75d9efa14b974
MD5 6ac3e21e18ae0c0ef42b3b5b563cb9c0
BLAKE2b-256 014e6bad3248802f937d0a34e10fe494bf7f34d175e1e9dce7d7d735a7981023

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 c9b036e4a1a10aa924640e7cfee8bf03065917df2dd7832f45a66bd302c8a975
MD5 3777384f5d61b2fdbc1e84875c459780
BLAKE2b-256 85257d081eeb4cbdc095e66903179ceeb9a1f246a7485ef3949f0c1d81f7e350

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f37b8b953f54f3fe154dbf9445da13a78d883e3866ba6ed7e078a68bc8b381d0
MD5 ce24410c8b8e8dd67b4b4fe573e712ff
BLAKE2b-256 8fa8dab53e91680d9fd473b2d5d9c0ec476369acc195d1a136b5e9db797920e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b8ac9c9a1fd4fa632820b88a8f819c6e4771536ffaf35b35c93ed342f94c0ac7
MD5 d877bbd5e7aaa738fe80a1073c631de9
BLAKE2b-256 70c56e6a56d0501b17e7bd48e9eb069ad59adf165242f828f4d68a6077297153

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84e8b19d8110b06f466e2817c1e8a0c58fd2ee6201e9013ef2493eee89295c5b
MD5 ebb09c80ebfee9e09628c21dad37379d
BLAKE2b-256 d1998607af2fd07d8ba9f5bafb04630db3c84f4be2deed64c8f3f7fed1b09bf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a6cd3cf39d634e961b999745d208a59d662b794f9ad6a3bee990529a9b600ba9
MD5 78c9367de7294146c4516b07a6c70d0c
BLAKE2b-256 df330cb0d4597a18b7841c6f82eba7a36cc55f0d5dc21e77d65a215f1bba9079

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 b5ba45583d293603909c271a630232a7ff6a75d4e33dc58e07886b1d9940b154
MD5 bf92534e7e3298b87aae413449143416
BLAKE2b-256 f774cff9251222659341482356b8c7d6fc74c65307af197a5385effee3db8514

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 db41ef3b12859ee46ac66e035a98304a329a00ea0e6c6f9b7bbd33b457c4b076
MD5 c921a3e7cbc8a6fda964c40bea5870c5
BLAKE2b-256 0c1e3c6b167ae0af0df01e2f96cb3065c4329d23d9764252895705f46a852b9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1fd9bad807c1a18bc783493941c49b66dfd1884a1c1bc164659adcfef10aa71f
MD5 05be4b16051295e1fbcec0ced3c8fee9
BLAKE2b-256 7d6e3a78f19f4aa5ae3eb314d85eed6d2a9a0dbb82e30d07028c25f4907bf26a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e33fc85f202bf8a2c4f0d5b4c6035949b0ef06d5d859b47d14130f7b1072a746
MD5 738b85807f87fca928c799a62ba5a233
BLAKE2b-256 9ead43126cedd30fa14961e21e88420db704c46064229b710b94a95f365ec788

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