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

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.5-cp314-cp314t-win32.whl (68.3 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp314-cp314t-macosx_11_0_arm64.whl (79.6 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.5-cp314-cp314-win_amd64.whl (82.1 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.5-cp314-cp314-win32.whl (66.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp314-cp314-macosx_11_0_arm64.whl (78.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.5-cp313-cp313t-win_amd64.whl (82.0 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.5-cp313-cp313t-win32.whl (66.4 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp313-cp313t-macosx_11_0_arm64.whl (79.6 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.5-cp313-cp313-win_amd64.whl (80.1 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.5-cp313-cp313-win32.whl (65.0 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp313-cp313-macosx_11_0_arm64.whl (77.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.5-cp312-cp312-win_amd64.whl (80.1 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.5-cp312-cp312-win32.whl (65.0 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp312-cp312-macosx_11_0_arm64.whl (78.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.5-cp311-cp311-win_amd64.whl (79.8 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.5-cp311-cp311-win32.whl (64.8 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp311-cp311-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.5-cp310-cp310-win_amd64.whl (79.8 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.5-cp310-cp310-win32.whl (64.8 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.5-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.5-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.5-cp310-cp310-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.5.tar.gz
  • Upload date:
  • Size: 25.0 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.5.tar.gz
Algorithm Hash digest
SHA256 ae88431ad7ce2c2ca414a51f96fce0b308ac8365d94bb2a3dea5c3e4e3a482d2
MD5 4889224469f9afaa8b2625c7373fdc30
BLAKE2b-256 98969b39359e1621a7ab4f187e444fe6a86eb7c77dd0338d82622363e5c44ca1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 5a90c13ff31eaffb38d0c8c86829ffaea52dbeecccb5657a3eb67583ea898b51
MD5 19ef236434b779d8b12bd5e697d1ef4d
BLAKE2b-256 0e6c1f3b06cf995603b09d613cb590460b2e27d023a8cacd9805dea112a2a6e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 ce534aac04402da3b86aeb5dccb40635e616a0a14652943bb3d716584f8c5e83
MD5 77761f306479f66a1aa682bcdee6a94b
BLAKE2b-256 a6b55620169ec2eb141bb79f1662801b623c01c91384e54df691c4fa0aa3402d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 64694435264cfbf9641248a4ad6219b2294b804c6995547bad005cb0fb766bec
MD5 59edba5ec9f9bce08a70e99cd91e801c
BLAKE2b-256 1351a6fa0b61a83d98d733f43ac30708b307ebd09fdc7dc0faeba75910ed9fd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7ddb06d42ecde4cb9af1463cd5327cf9fd7a6090606eee1955b338d4587cf52
MD5 0dd0f239e63e2e06748d9a3e8a2f3d93
BLAKE2b-256 49411259738e6c46769664b2b31c3cb2065e373fc6ec24fda882c20fc5758dee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab19c77cce50fda040df24966ca71d7a2b1f908f83961b48d8d00ed960b9e6c0
MD5 ab845c48945f75078f1b54ddffd82c52
BLAKE2b-256 ca5f381b79ba7f00af714144d6d6bb76b6d84fec7c5cb6aa1726fccf71e84db2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 06fd2d7f0f13c0f7eff2048860c8ab7acb3d93ccc035c46bed48dead28b15ce8
MD5 0f3952da33fbd498a34a012e28ce59fa
BLAKE2b-256 a17de7ce7e586ded8f8a5abb3d5d16265d5202333045da424af5274f35878b56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 775e470c2fa1eb35ab824259ff4377ef4e359f4a00e8c93d6f2cc620c05ba575
MD5 dc5d8cdd5ad4da57cf32a1cb6bfb5823
BLAKE2b-256 3832f3afebf125763dcecdfed40fc4a117ba7ae3bdf928fcc2811dd3dc3a532f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7a8fa51ea18b0db458d2cc34bb56c6b2093e6ae34b2a578d65e053fbc5a87737
MD5 1b945b6eeb5b871fcec18b214a5b1775
BLAKE2b-256 45d95d6ff427e63428559f363f409e32020954dcd4fa4e129b0bf18711412710

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 36707516aea56fe5e814bc89e4216ea18bf8cd3dca25216424597832e7215abb
MD5 7c1564500f707662389c5802435da8eb
BLAKE2b-256 a2a0fc77c6281f81ed857e6adf4b3b26686d499ee9b874c989945fb1924df817

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a1763c925caae1c608c46a7559dbc86e768cfc6444e7ab1e3d3cc442b4d4c809
MD5 99c4a67b96d849a03ec7d1997a8b5d92
BLAKE2b-256 fba82cc712584841507ae226bca4fb8b3c3916139fec45c2bbda6e6512d87cdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 795356410d56cf509d567bab6797b464cd04648e4f3a8b4ae1871b44eac2730b
MD5 32d2fe7183ad4d252225a8fd5d103148
BLAKE2b-256 f971d5508348ae81bc00458f3a3a783e3d267885ad1982fd62105c40ee1ac840

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 f6092f866ff4887514406e5d35dc17d550644150cb7f4132b1cd50771da5d126
MD5 1629b91117128ea8730a3d998a6af063
BLAKE2b-256 3b181811aa8a8a0e257748119ba09959e89f6398a29479482f1d9e126d7cb46b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 64a1454ca9b64ac3380660b7e748d761941063ded151f440216dc582113c56aa
MD5 d15c4dc0cf2f53e275283dcd4f26ef81
BLAKE2b-256 b8395981e4a1515efc9b51e5f1a9de5182ce7cb2feb6fbb0c06c45ba628f5815

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 66b976c607270fcbe5b6c7cb7ce5279487ef4cdc332e254c18ebe2fd166853fd
MD5 58170243a74eec65c42ce56116cc6227
BLAKE2b-256 e413aa6a1d81e311b4cbec9186bb105aeda96437e711d0208d10f2c5b5959c9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b87985903756e7bb9ff5d73628a3a8b7609fb66b067b0542e1441ac44cb5bc6d
MD5 f3348b4975576bdafa534419e78d322d
BLAKE2b-256 2f36770d9e0ac5d9209997cf81f57b43e078e324aa3a44c06ae5232b76f6fe3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a4a170cda6539c4b854e4edef95b9400aa3e2c7f3312802a72c89b221b632aa0
MD5 807cc2a56bb20820f674a1447dfeb835
BLAKE2b-256 39f7ba0f3913d63b5aa42c8434079e928fd3b366bd42e1d0362ecdab8550f130

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 d3e9e020f05060c36fe7007a7eb32744610d429d2b7684593c580a065956665e
MD5 faede492f2b8946b9e08e6be6fd640fb
BLAKE2b-256 3b1d74a15d1c0722018903aeead87418ea8833ca5590cf2ac9a41908b4671576

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 47eb969ac44fcb61908917497957025f8e3515b026860a56a0a09ade9480b289
MD5 40d51990eb89372763dd4d035b09f6fb
BLAKE2b-256 3e6c456d9a6551cffc46c493dc5cf989c3b22a57de7e3684ad3ccb8ff0a687f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6e0a1d54c673b15067d95370bcf9158dd0e8bddd3420276a230fb6b2b137195b
MD5 44adf28c598c0fc84e58d9a468f8bc4e
BLAKE2b-256 79c12a8013f0e3420cc547f3ce813929f1540b7763e01a654cadee781a326027

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0f13ec1e78961bee95fa9b1844e7b4a21196e1dfd69eee590ba1e56beac0913
MD5 15c1470fe493a09a7a71bf2b10ee7b2b
BLAKE2b-256 e1e7b67ba89a90c182532101e9b37872c26c4ecf0c64fbcd84c80fe7fdc2b426

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6d6df186da2e9de74518dd847c283c614fbe9ac46d8ba0bd0673e0e59361fcc3
MD5 113ab432a9db0f15ac17aad83611eb29
BLAKE2b-256 683358d27e43de6557dd9dab2069454adcf07801d911a4c5172493b8774f2516

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 ad63bcc14c9215e5a651f4dc7aae5fdd5780e499e98d40278465ff1af303a265
MD5 ac7c6db37b46aa95596874b104f21122
BLAKE2b-256 5e88b2c1f4bd908687c16521d3a8b891a65d1715ee0fba87bdbb4e5d34a93bea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bfc84fbcbf625b7332a82d4e8004fa54e01eb6e6528727a150bff124e12ab196
MD5 9301a3bd2abf7746d0dcc295a11be304
BLAKE2b-256 2b82acc6e99b87d835e35639fd5dd3b13616404f9f99c1b849784993ed7ba963

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 58332ff077520e6a828e749d656c8ed812fc95bd91af079bfa55473d4f3c7a70
MD5 629a5d360736af960fdc4b8b853a5d83
BLAKE2b-256 c5c06fa91c6199eba0156561368af82948cd342d1b3f8e8ca4158b9c42d7ba92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c0d2041ef8d53c715165385e2e75aaf470e7c98497f07695366b5c3eb9092c9
MD5 1dea53b8408060b20c69fb3a3afb4f83
BLAKE2b-256 27f19590371775379bfb55ea03e7378e85c7dbc74bf2727b8f2c687e1d84e4cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2fc087a0a2ea08a448a58ce1d909ab580c71f8a8a1dcb14ddb697e772ec50f95
MD5 2a7924af96cdbba140f3f4547bee152f
BLAKE2b-256 d0995e457d9ec1089b50825c26b5168d45cb4a1e11a5f692512bc2501f2a08fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 799e815106825673b39d3e4a9d64fa262842b1f5e6874f9d416bd7ad4e0dda07
MD5 21775ef7877e9e636ae9a428d6938b8d
BLAKE2b-256 488956f70478649f4bb0d0d6c1a20b72ae24e08240d4bc5f99443c4fd9c7d72d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e88d0fec587da3fd9e98971c77ddd962a9f148b28bc468914165773f4cd12652
MD5 85a6fa55a2bab3eb6c1f690c47f37437
BLAKE2b-256 4001d11cd96e87d3b5bcfd29be70930c495c4a8d2fc3628dbae1495dd8834ba2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 76431285245066a9d309b99eedba1ccd6e9e2adc38d6dbed161b8ce73ab573ff
MD5 4c461442f0b4b30a6ca87839856f8067
BLAKE2b-256 e8c68e8a8f81d9f5af1318fa92e88320ee3de01ed8dc60c7b4b7e385d62a19b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f4da687da7ca322b33d3ab424de61bd1503ed2ae43f9a839807092af18d472f5
MD5 0237ebece72ae9767c977e64f10a1b10
BLAKE2b-256 fbcab2bea24dc4d3942a26948a501620e11029a12b335a9803969138da37395b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4b611ce26edb9b23880e65206d42b8319ee87365aa32fe3917965f5aef01190f
MD5 561b86fc78b1418895563d45d59ae797
BLAKE2b-256 290eb6606c358188c8819d5ae46d7b407833889b80f82b13baf529112beb8495

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 fce7fa2a89e9dc0d4f4f961de6c254df863a8de257ba581f8bb440ff813c8eb6
MD5 6894921be69af1dd49148ad57aaf27fd
BLAKE2b-256 5f86160d9bc77fb3a6d344466e36478e00d3a9a1b1a1f330b78fdfbf3c9a06d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 430e4836cea25cdae01517f71017a3689a245b582e50a0155b5c235ab4278354
MD5 b57d7a8577f63c7a7e902a052751f07d
BLAKE2b-256 deb122389b0278d083e8a2271df245021e56271200c6dca3180d032a88a9c908

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a0eaeb2c65886262fd157522e36a88cfc6c65f12e74024468fe4e0b4b8beb110
MD5 0f3325a590136b16d237e1863d8f0770
BLAKE2b-256 6cd0180b4791febcee3fca27f8d33c7dc788c9fc63365d92ce3e9d88de81a5b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f5799b2105abd709e7e97f48b068712bf42e13cf0d4a2984acd2db48d153203
MD5 7afdf1f85ceb209d5394413bab6312bf
BLAKE2b-256 8b1658a2c717211ba4480c3b4455a8535f1b917e9c1ee5c42a30139123d7da5f

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