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):
        ...

    @method1.attr_name
    @PrivateWrapProxy(lambda _: _) # use empty function to wrap
    def method1(self):
        ...

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

    @method2.attr_name
    @PrivateWrapProxy(lambda _: _)
    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. It returns the original decoratored result.

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.base, 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.3.tar.gz (24.9 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.3-cp314-cp314t-win_amd64.whl (83.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.3-cp314-cp314t-win32.whl (68.1 kB view details)

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.3-cp314-cp314-win_amd64.whl (81.7 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.3-cp314-cp314-win32.whl (66.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.3-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.3-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.3-cp314-cp314-macosx_11_0_arm64.whl (77.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.3-cp313-cp313t-win_amd64.whl (81.5 kB view details)

Uploaded CPython 3.13tWindows x86-64

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

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.3-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.3-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.3-cp313-cp313t-macosx_11_0_arm64.whl (79.4 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.3-cp313-cp313-win_amd64.whl (79.7 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.3-cp313-cp313-win32.whl (64.7 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.3-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.3-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.3-cp313-cp313-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.3-cp312-cp312-win_amd64.whl (79.8 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.3-cp312-cp312-win32.whl (64.8 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.3-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.3-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.3-cp312-cp312-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.3-cp311-cp311-win_amd64.whl (79.5 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.3-cp311-cp311-win32.whl (64.6 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.3-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.3-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.3-cp311-cp311-macosx_11_0_arm64.whl (77.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.3-cp310-cp310-win_amd64.whl (79.4 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.3-cp310-cp310-win32.whl (64.6 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.3-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.3-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.3-cp310-cp310-macosx_11_0_arm64.whl (77.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.3.tar.gz
  • Upload date:
  • Size: 24.9 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.3.tar.gz
Algorithm Hash digest
SHA256 7ef819d9a5971901a1a962978b61ccb2f2a3266433b8e7d212c42b2c1d2651cb
MD5 10c19ff31a8c1a7e8624e3139c14afa5
BLAKE2b-256 707256e47981452b56f2fb52d338b3c7e6b21446944ac39f837a9ef7adde44bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 8f465b01977719dcefa9c925c7078f22604e0ad0224b7a48d5a6ce550f8f6576
MD5 4ee8d3d3850f074c971b1f4404f79539
BLAKE2b-256 6fb933a01c8cde6b4678d6e9f7154b267920f80fb9ca7e2c2269da8e26673665

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 2f65f6d3abf7f93ff8fdcd6fde2565d1a3b4a553717b07cb5440389cd4473b85
MD5 91c1bc184929714a6c2953f571784bca
BLAKE2b-256 cc661035c8a9186222d6b25056fed7b12bb224c32b9621e17e63381df3e7b333

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3c2856238a0e3cdbaa33136f70b8a16ff9547d6f9e98e51919bab0e92bad98a8
MD5 b2e00e97d8a68058a197919b0986eefd
BLAKE2b-256 982243c7c6c61e4e309a7febfa100d59f741b8fcc2f47367b9c864a21bfa7e31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 51b8bceb8997aa47feaa84efaa377b680579fe16669105ba805e63e8774c95d1
MD5 9de67fffa307be40e79ccaeee67317c6
BLAKE2b-256 676a65155be087e41b652ff80ebbaa12b6e37374854c961960cfb9a7d91ac1c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a5b63cca00026782978aa2495f905584fce4dead7e5f699960ff121f872136d
MD5 b8f37a02b2ab0d0332276697ecb0ce3d
BLAKE2b-256 ce9180c8a177b6137d8acfed6d0605399a802d0cce42a3da3ceebcc4b9075a78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ac7590c1e92ac8dd10361e3b1a5f262e0eb2da7cc4006e3f9baf89bed3f8c3a3
MD5 97bd56d7def8f7936d7c777a64d82fb1
BLAKE2b-256 7c36fb24b4147c98b2a8c6f468987fb732139e8824219df2680c2a68131da22e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 a5bd1e79b1eb2e032e143ba13ca27ba609044be23d7bcf8f8f3e4c593430e521
MD5 8af0c8c94e1d6d4c69b67ab2dec04b7f
BLAKE2b-256 7d70a9cd606941d89f1da93c116b54cbfd0ac53519fd2b17d00726a8871f2dda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7997961b5868de1a5fdda53b202dde6c0bd8d29912943235989ec94fd2ab64e8
MD5 bb15e732f83da90349220eecdebeabcf
BLAKE2b-256 17b1ab868c3fada0c164ad356b0bfc3e312b9edb7062dab9381b19ff921ce332

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f91dbca5abd4d6df4214ecf8f7172e44a9fa8e2e2cf452bc3e797f0a21102098
MD5 e0e521d6b9084ca560b7558add4248c2
BLAKE2b-256 4de1adb93460e231087904ec36e7e8e2be46957efdafd5439da07351d908abef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d2e58d0c105d84e2b384fa94d7d3e7cf02a5fa0d4f1dbde6bbd11e46c059fbe
MD5 7e93f0e0ba964c52554f36aafec391cf
BLAKE2b-256 e4fa73dc0958bd63de56f96e5c300a33719c9b93324b994e3aff86d4a6febb9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 b280024510f811644bd033cb8444f23105557db0b5cc7937502305a22958fe90
MD5 9e1aeccd2e65204029273697b28d4236
BLAKE2b-256 dc92634ccf4c7c8124fbdc2855f776dce8c0ab39d3798ad79c7952296c3ca112

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 9d2e0e43c3c09fa38aa5fef6a811bd269ba4185f8a95d89bbc66771e1f506919
MD5 c7400687e2384a79ca8608bc42a56884
BLAKE2b-256 c1044d7a98edb01fbf2c11fbd101639d4be122671c0d3d42403c299862c02931

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fefcd660674688bbe49ed4df74614f464a89f9fc0d7885a09c08583651c41f93
MD5 e7cde9b6343ea130a1aceedc81d52303
BLAKE2b-256 81c4451988003b603ee14df9459af09554c44c2d97afd15f49a110f7d1442401

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e13adbc13b73c7429f8d2384da9d3ecce5e25960164ca7b15f3cad4070e84883
MD5 663d5a8984dfe1df4dd209f131a9e3ad
BLAKE2b-256 860b29a2553a6988617dfacbecb6de7ca43c22e6c20209d59af7b9cac4649ccb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bcc2a786cfdc7effa63bc79aa7d70c74d509f6d03abe29e00c176f4f73b1efcc
MD5 bcbd3ba98a37d1135c40826ab7ba0b20
BLAKE2b-256 1fcc83ea3096202de5155f3e2e20d79606e20ca63aedb8f0c821611d73b5360f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 57575b1223b8de1289fccf60ef54ce226764108a5be8f32d676534fc3e0d62d1
MD5 18a67663509a80bb52a8a05d61439319
BLAKE2b-256 3202916faad1cb788bfcaa3f9e0501fb39ee192f6ffd56e6ac3307a172171369

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 c9a2fbff27903b1acb4619f2528f9dd4925702bf67a2476da729f2d922d8809d
MD5 7ae1ad4a7b43f4e884cb607cb513f05f
BLAKE2b-256 4756b1f95612a369e1d1910c4a35dc484f37df6fb2c4c1180221acbea1ec9af2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 09fa8fdc2e721d4fa565494125a818278951c4e1e76d5415129233575249f5a9
MD5 e55f4c87a97da691531d9a4e882bbf79
BLAKE2b-256 6a4cf8d5f9ab64754eee5c2704d52cc0fbe30888096f48666744f3cfd2aa73cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 634f01a8a88a34490e1510307580975804687dd779aa221eafd2afadd3187714
MD5 2b9a8c49321506691d8e2e64ed067793
BLAKE2b-256 814956c89633aba79bda4f349f3dd3ca6f321f29a5527e6a61aa6c556f073dcd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 00310e606e07ce2555b53c5ed8ae8716bdec4993f3c15974a3f81c243d00597b
MD5 5677890bd833afb334bf1d1376b7f38a
BLAKE2b-256 b7fbf681a64338be9908106145067407aa6a5698cb590d1929dd379d13a4b1fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ea1715cf52a728c9ad1a92d74398c52a3820e37dc2e11afe245166e0badc63ef
MD5 0aff947cef72a48a3147edbcd6edc9de
BLAKE2b-256 c64625a71ed08feb0caf52e61164673c69f2f38c536c59e46f85eb7b322e597f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 63070507f65a70ee58c7cea62bdf64a1d1e9c0939f81209de1a6cc42de798cbb
MD5 c866964f60a504b625c8905630300b55
BLAKE2b-256 5abafbe4f602599f2b08e258380c2be05892526afee43eb7ef7e2f424fd629df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9f21565d4b3d4b9dd96ff6752002931d2aadd8e4d46a48eb608f5c985ac91191
MD5 7650e778eed5c529fd5d96fc0f51a7de
BLAKE2b-256 72022ce3e6eb2b4f6b563c53a40f53160a346df46116454f3da25bae35dab551

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5eeba3123cfcbc109643e856cbe47e7c67ca5ca715e6f399ea281552edc11e11
MD5 fd2ae6bb5566866b84f8d8b3eb08f132
BLAKE2b-256 a28f592df00b68761e40dfdd35c69309cc2aceffc10e4080e23263a4f4ad881a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b9c349152d0b85ad5d1bff86933e5df87642680953292346e72c15ba251bc5e8
MD5 62f59ca572d8d98af0669f12de16229e
BLAKE2b-256 9826e48fbb256d6d8b35bc175aedf3798d308134b775215dfb1272af51ee7d33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 db5b9cc695a6fc0786cf19cd13b521b472bbed91a86adcf1d0c987f0632c2c05
MD5 d4a972f26c0c65b824acd9775da9dc48
BLAKE2b-256 60945674b147d4fe385dfa85516c9b43777957867bdff5a052588b639f047f1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 2f7778cbad987fd992e61ab523dfe14c42d7e7404460c6ef9451f42dbd414a17
MD5 f2207430daed1145702b131dd69f959c
BLAKE2b-256 17750dea401fbd63b42efbc9c5273032d8877025592fc1f20875d231af960c4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3605a7503c8964f966a12366e99bac5c28ff4cbc629d9f5e0d4907d4aa092980
MD5 f0f6dba791d0a11ac0b0a5c39589395e
BLAKE2b-256 018388557ea9dbd920e3f6c57240f2beaa5f934ace72d9627cdfe56c3ffc3701

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 41551a02cc82dbaf771826132cd239edd4e631053fa753eb0b29d7738e37bc21
MD5 3debac0884b2cd68ffd21bc0fe99d043
BLAKE2b-256 b6b1ecaffcbd60f33fa5b726c197457770277a5b266334b5eddd29af2e67fc8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4d2f15972f7ecd34c1809685113e5df579828cb1524d6647000d511c592869a
MD5 c5a7d9fdfb40ace0bfba5af8cab2fd69
BLAKE2b-256 d458f24e8ddb599bd42dc59e0d10daa62f73c837d69119e76361ae350cf6656d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e1178806e32c32e939572f77c6596bb58692ddfaad261588fff907a1dc01d9fb
MD5 53d9266e2945e963a05920ddf6411ecd
BLAKE2b-256 3390530d5641a5a29a360212a5a8e5d6b6b1bed8f19476f8994d9f463407bb3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 4f5effd256e03a80c83a9e74ba7811f2c1b17990cf695bd4677985f3afb74cff
MD5 51859c52fcedc5542c8a8f4db473222f
BLAKE2b-256 4a70e31f1cb9517067df3d03e0f9045a37a9e89dfc02171ae8b05055102ef57b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 36b0e0c7329885fec0235f496f204e18b394c5ade284f0da1b2bbd23e49e73d3
MD5 4a493afbd7de9ef0e0338216575f0fc5
BLAKE2b-256 17cfaca8bff92530a95f524f4ce34a4d1cde91b8cefe6ab658d03fd751127d6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee3a844c3754e7608f4d64947c32de0c0da0249a7a34fa661d17a4d200b20335
MD5 93309c63cfc1922286683a8e48924566
BLAKE2b-256 78caeba7f0686c95804e1d5d32d59a2e61e097e227d5d03ab520b6a6d21e2bf5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1dc81e0933c1afd956c6864cb9f391b76a7613366a93fa7bcd7369ea156935b
MD5 eedb5b4fbca4389857ad8151c3422ce0
BLAKE2b-256 42338360bf80ba418101599c067eb8699fd4f94376478968ee45116d417a6896

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