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__.
  • CPython may change "tp_getattro", "tp_setattro" and so on when you change the attribute "__getattribute__", "__setattr__" and so on. If you are fear about it, you can use ensure_type to reset those tp slots. For the other metaclasses, you can use ensure_metaclass to reset those tp slots. Also, don't set those methods on these classes in your code.
  • private_attribute.register_metaclass must be called with the metaclass which supports weakref.
  • Don't set __static_attributes__ in private attribute class, or it will be removed.

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

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.8-cp314-cp314t-win32.whl (74.0 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp314-cp314t-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.8-cp314-cp314-win_amd64.whl (87.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.8-cp314-cp314-win32.whl (72.5 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp314-cp314-macosx_11_0_arm64.whl (80.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.8-cp313-cp313t-win_amd64.whl (88.0 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.8-cp313-cp313t-win32.whl (72.1 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp313-cp313t-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.8-cp313-cp313-win_amd64.whl (85.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.8-cp313-cp313-win32.whl (70.6 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp313-cp313-macosx_11_0_arm64.whl (80.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.8-cp312-cp312-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.8-cp312-cp312-win32.whl (71.1 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp312-cp312-macosx_11_0_arm64.whl (81.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.8-cp311-cp311-win_amd64.whl (85.7 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.8-cp311-cp311-win32.whl (70.7 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp311-cp311-macosx_11_0_arm64.whl (80.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.8-cp310-cp310-win_amd64.whl (85.7 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.8-cp310-cp310-win32.whl (70.7 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.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.4.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.4.8-cp310-cp310-macosx_11_0_arm64.whl (80.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.4.8.tar.gz
Algorithm Hash digest
SHA256 c59cde97e1637a1a2371b15b6383a6e05bf69409aade5cbef91dfc6646822377
MD5 6670fc46bc5be222892b97582e4e6ff8
BLAKE2b-256 88ba62321608d07e3038a5163cc6cc74b43631b94047189f5896a7e4f3f87533

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 fae9fd093e2fe89f50ae373915a7330cdab020230a2aed483f9dc657d878d242
MD5 1b6e7ec36286a1a92bb4fb51c3820714
BLAKE2b-256 aeba9bdcd963284e381e1851ab438178aeb5b7851582e8b8dc42a7df5af41e65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 2478e540e0318ec6a59ba800ce99cc358c0368bc60587a3ab7e64b05c230ed7d
MD5 909484743d9b6287a4aa379984f119e0
BLAKE2b-256 a44fdadfd9fbbdd4b2fdaf932f794e8c2db73b5734f5e5ae929cc69bfa7c4302

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9527f24a797aeead849c51485f5eb4ba5c2de7c2a8d8b21720801f7165f4de06
MD5 4fa31a746d74714d6146a0701dcc44c3
BLAKE2b-256 e482b22f5b14b3363c00040c28d4fe0ee62fc7cba26a91cc9551da7a01e52828

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd022cbb112e4dc73ffe2d8523094d6e406b7ae54afbd0d7ec48ff2db402337f
MD5 3aa155a6ef38dddad255f70997f0b3d3
BLAKE2b-256 ccccd269cb3835ce09e8e2632964a744d74a8c7b22661f2a97bafaaed0114ec8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d8fde9e6816945b5cac8f6f465ac7e96a288edb618a377d31995015b7429b99
MD5 f4def1d9c3507bd0ff4c1f9a9241479a
BLAKE2b-256 a86d306c2aa0e9c3f56a2130df9b2eec18c7aca2150bffa69e46d673a5a87b03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6cda2cae572aef2286fe7ecc843322bd053ee780b0fbf97bd5ec24ca272564ad
MD5 ebd05ed7201f100265797b2272691aed
BLAKE2b-256 b51854e882f58ebd165147b1a47afc2b5ec1dd7708d609b5fc679b593c4ff049

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 5b7a5852153bd34d6f41cb6780b1e580e85d6dddf47b5546a29096ce5b098795
MD5 da5328cc45cd06cf5123cf3539ae90cf
BLAKE2b-256 13955c49bdbf42727149dcb0fe865e416a3f67616c28af802a638424139c3466

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4590fcd4149463d97980b54e716db1a09742d5bc1b3f47208b24a4a04f703b33
MD5 98da2b02835bb33a48246d04e7798694
BLAKE2b-256 5f4d7e151bfbdd7b6c35086ccdcb8e775e273881d578467d76e8754fb291f006

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e27505922c8b0cbef84d41e3c72ce4abc79e70be4cefc02cea5122ae2039773
MD5 c95eac257c19938258c7fc47185bf6bf
BLAKE2b-256 e75f20094e6149b39735e4aa792911f7b4095089204dfd9507c5bc6d13386085

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7000ac73abcb165629eb96807cc4dab7321b68460b48408f6ee992b0cf21542
MD5 cab0646d1f0a512623200eccfff91b32
BLAKE2b-256 fc3c925e3c15984b9568f1ca17fc0709c8675df5df8330d2d1ad5584bef8f76f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 a74b18a914c3e266f60212d454e173dc20a003718519198271791c6a71e59915
MD5 ed465a4da376cfc27b0ff022f9e39183
BLAKE2b-256 ea998ac325523e2dc1e5e7c073111fc2fd2fadb236e65c1bd3f681befe19d17c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 1220d708f7d8029cf0ee1fac119832d0439c00562530f7ac6839014b2fb4cfdd
MD5 32a2849bff457615b3d6ce588c35cf19
BLAKE2b-256 6a90f9ea3c59c9b1dc84666adb8e06ec5f8d480c7a44874c471562e6aca0c0fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bb92e6909101765bc28c7fae5441e924f563b3fc116a6e8dbd1b394cecd1e622
MD5 056be63d467f2f8ed2fe0d0a369d0739
BLAKE2b-256 c9b0f0900453914372638b703d3de7ad5744a169ef4fa99e6a6b7e9afbd3bdd1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7904309e504f0b44dfd025e5376d8eb816ba420f1bec4222c062b71bebacc633
MD5 476ce67e32c30ff22c2e386ea4d2d9de
BLAKE2b-256 bb93d4485952c9293158e967aa09d8f368e262973f5a6366885919b4a5dce743

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f6742852c5b2fcebde2fb1ecf3cb779f91d4aa74b21cb6e6726318b024c30c03
MD5 19c425e7d67e9c9635f66d61a3d9b6de
BLAKE2b-256 a04e63b2a8061e36005e92515e8f076df1e0e176e63538dc64cc332afc5be922

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8e4702399ba87e7897b37ac497e609461954a1edf187b279c63622f66ac73521
MD5 66c0ab68ce1fe5b144e5ea41cf9fd172
BLAKE2b-256 9117214db715cf1e1370f40a521601c3457d8f8e6f556c86cce86817035c451b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 1ca56749f99535cd4a4e6a0aa84fda74072a8bf43dba477831ac0554b5d9c2b1
MD5 f6c317361956c54f6a5399a21810fc65
BLAKE2b-256 f23843f09a56463f7b90b4764bcbce0b92004d44a1d7585993b0b7b5d16e14d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9430b917ff1e811bcca5d91c456087e6c65e9f430bc63570e8bfe615e4cc4bde
MD5 5e925a1cc4dcd278368cb400dfe34197
BLAKE2b-256 d13bf2642be31130f77fc1d1761fbb875c30e50b479e813b854c1d1858b8f3e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 de3f5cc51999a752d3b4b1c568fd388f2193c889ce33907346a23da6748a62cd
MD5 82fa303404c13ba73e20f02836674a30
BLAKE2b-256 85970df4efd0db5340ad0a9ec3214bf3305dd429e27fff04dc85280851eee285

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a99f94490aea1fa621bdf3416259c33db8bdae47f971269aa38b70ca494153b2
MD5 c70853a324b59575e72059575907fd98
BLAKE2b-256 44c19ff39e132f2ecb3d59fd7523a39cf052145556a26b8ddf0fb37c96adea1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e7d653c7faa430408f385f474acec00c7f89393dfeb7cc33882a01964073dd35
MD5 a06f375b1507085a4395e235f13fa072
BLAKE2b-256 4e03ba39a1d13a132dbc5618b2a16f027ce1914d6a0e1656cb175caad29e5ad0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 2ecfb5d5befab201a3a9d8fb18bdfa4458843572da8e37e86748865a6ba0574f
MD5 0c7d1e2cb367096d19521e5af77df4b7
BLAKE2b-256 6d9344010446f58cb96eef21b6f17d823bc07edd0c897ef452cd672628bd0060

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5c94c48de991c49dac354a8a1982600194eb44103254b6b39a378aea5655249c
MD5 89e0ddf39e1935c07b6016d06d07b2d0
BLAKE2b-256 e45690d66a5690d4b5b22b4ee8c158981d1071781fe93a0498dd296046369325

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1e48edf6a7fb6fe56373b692cfd6835290d779af5b8e25df6ad15479daa9487
MD5 0f2c8085e914d71df3bb8f3f2db0524f
BLAKE2b-256 43e8064e0652b0756c7d9cdc519d6ba5edb63ee0b37cb0b3df36f06210c770e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f12be820b2c834bd23b89a53f63fbfd65f4c4f4e16e632ef10f2e692f3807e7a
MD5 482601c58fe8eaa492b136e7a5af4752
BLAKE2b-256 b6df4724870d9763b589e197404b9f0af72569828faa892724259e2af9f50aae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a7491acae05971388b1f49248285606bf8e11ff45fa6f663fb990d00d054b1bd
MD5 8fefdd9f92b01e52891d590a55adf35e
BLAKE2b-256 21893d16d1bc66aed0b0b2b2ab5b321a0cb228356f8704c8732a21684f89cca2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 6bb42d8d7b95542f2e6391846e02da809db407581014c558a8497fd26cf45ce7
MD5 81e639082cfbd1b937770d995841750f
BLAKE2b-256 f19c1505cf61a8387193a106ffc0d98e8bf19d9923aa700e8b40591f62ba4cb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7d587c07c28720d5cce03db185b37e7eef528a331ae84e10a6f6cb41ac370e87
MD5 85c00427b0c45ec3821d41195cc0358e
BLAKE2b-256 7cc23726ca029f96b436073280f67d047e2f1d20b486e6bd980352b6d2d2aa8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 31e68abda15a7f2106dbb28c34c02950c815349d5a1624a3087736abfa9ae627
MD5 a05cccdd3555f99a06c85b3b311d92ac
BLAKE2b-256 eea49fd261b434a82841258ce44b5d10c988c87cd83c832e629fe74ed1b05508

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 52750773f33659afeec01314637fbc6ec09665c1e3d9fb3c8a5b919d2aee8272
MD5 41ca1761e4d002fc852b0eabed6c9ab7
BLAKE2b-256 7d5a6f5b09672179530384f636643cd25dc97ffef368efb685abc5957d937622

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7b5319fff5d4d9c1ae569cf5e67a5427fb22a4d13e516932e48ebc3ae5321f31
MD5 73e38f6cd260e0ceb023668e11d78ffd
BLAKE2b-256 f44f8b8bf19b36240f278a92d67542d23838cd64e2729487f767ac106a957c9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 8ba4982db8fb5bd00aa19e3b522761179752388f54a2ede95c32b07dfcf996fe
MD5 c7bdf71bfa0b4b612d343d4bc14d93ca
BLAKE2b-256 1df57d0b07df857b843daa14ed7b147228ddea7638b97d6546c2aa2ad3a9eb66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 927662d562e00e0d96aa525ca89bac50a3cacfeb3723de2ff41035db9ec1939b
MD5 1569d3fe76e81d562450afaa6ef1fdd4
BLAKE2b-256 4ed714882a50aef28d9afe4ded8517119a54bf650176a45da4cec52d4b85cc34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b73042403b6b12e643d78cbb0a73469270915b42da5ff4c9ed17f65394681106
MD5 d62a41dd42137d98a394c8a186bf72e0
BLAKE2b-256 cb0c623f9427755447a8884ced441f886faf7373b70428e2773c15b5803aa6c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e09afba1960d8ce1857e8fbefac49f16392650a351e8b1a3dab8bcabf1cd4cc7
MD5 d6e0f8fc746f8485dfddb5aabd1c3741
BLAKE2b-256 d41084c7a48658c3c201522a3a09107d4f8e5a50faf972ccf5e0933a8505fb9a

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