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

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.2-cp314-cp314t-win32.whl (68.0 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp314-cp314t-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.2-cp314-cp314-win_amd64.whl (81.8 kB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp314-cp314-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13tWindows x86-64

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

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp313-cp313t-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp313-cp313-macosx_11_0_arm64.whl (77.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.2-cp312-cp312-win_amd64.whl (79.7 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.2-cp312-cp312-win32.whl (64.7 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp312-cp312-macosx_11_0_arm64.whl (77.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp311-cp311-macosx_11_0_arm64.whl (77.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.2-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.2-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.2-cp310-cp310-macosx_11_0_arm64.whl (77.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.2.tar.gz
  • Upload date:
  • Size: 24.8 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.2.tar.gz
Algorithm Hash digest
SHA256 638a7edfa908e83c2c54319ffa0ec9fb9fb886e4291c9bf0e966fd0019108832
MD5 bd8b89870e6f78a91093f533dd4571ed
BLAKE2b-256 0929fafb55c9d486e929ecf0cde560a3e6582fb9504274f811c55406a12f088c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 83fa3e6373d4f2e50f458bd474535e0580320bd80b46e0438ea67eb8d10806d6
MD5 7f21bbac0be7c595fe9e25646b9f35f0
BLAKE2b-256 6ac383616222950106fa7fdce5312f03a28364cc1646f5b81c8f0cf2f13027e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 dd885faa9740d3c35188e86fe89c9f2afc233b1254bda7d9cc4083c2c7ca5da6
MD5 75bd7a72390e002e8d5d49bf6d075d1d
BLAKE2b-256 bf683890de8405805f705d5cfddf980f526ab8a97f853746b039680c158d4c4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 41344dc5c5b40c0a82e432509711c9393f1bfa5b0196f8adf20c216b88562e80
MD5 22bc9c30014c01af160f1062b8c2f8d3
BLAKE2b-256 c80cf9a3a46fdcae99a5938f24cb1d7396b17f898fa4df510fcab23b4c45c606

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1bb9c74f1f26e7695ba0b1d5f9d35738d07e6b2328d73bb08bab68373454ec13
MD5 fb185aafa3965b6042cabe106f035416
BLAKE2b-256 d73a95526571baa9dd6ddd5d9e51de0f093fd4b2e5258d78eba2a781a7c3782e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a652c6ae01b97e786b6ca8c7189c78069aa2184d867790f3943d57ee435e6b3a
MD5 750977f6a6cb2088b61ad9ba5165bdfe
BLAKE2b-256 2a91295164e1834501fb29359ebe5e2cffa94bf17c43d44bc31ae635536a8dbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6aefba47a2ee48de170cfd4dc90698d84b48b7580c8493a2be42fadff5d1af09
MD5 6710e82c23e53727c00f34c938b0b047
BLAKE2b-256 a5f4f909faac65e9d1ad8af3c9b3222eb547ffda35550dc5f7204279b3660e77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 a3031bbfd5ab1609e677f207aba77261f9f68fefe686f65dc9c4e11b17a5a930
MD5 e96af143a87eb8093ef6b39a5575b16f
BLAKE2b-256 892cb4f716644de32287d691a494421581eb10933b77e26a79d478cbc1f3cd2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6bb80f5cbc264618f2cdfcaec5d45e0197298f141b10fe0222f7941f168b60ba
MD5 6e9110c0dfa9fed6d1f80205b227c7dc
BLAKE2b-256 7a8c55a2b8cd16236f7039d2f25f3aae2aadd8cba09ed7cb4408e529c03e6397

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3112989c5be4c94631c17da599398d69a637225f9ed8dd00375deb3df8897448
MD5 457de388cb0e17a0a3ef23a464063fc4
BLAKE2b-256 a45df45fb8072b51ab22da0dc2233cd9b4579f7f56dd0ec893839832250cc66e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e5107e461404c801cdcba103a55cbff0cd447edc44503df558e97f43e370c12
MD5 b010eae7141c5296047797a402332001
BLAKE2b-256 6061648509854646235f99659914af2de807919af58559f1c16b110185c8c492

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 15dfc614944e7b66f6515e32e3b222a167ae5adbf371c7712c710d19321bb39c
MD5 c6785bdcd60c4dc759b0041625ff43b2
BLAKE2b-256 0e34ddfc77d9cfef9e0622d27d8a23b40b240b57feec77f1cb3043f07407fd7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 a5c635606862965727229432a133a285008b108cd91ed3d75b8856f5ce2b6a41
MD5 ef9384d67d06eac7ce5efad6a621b60f
BLAKE2b-256 25c5edf379691653488ff18fc756c5a133ba368f46d810e085c727a85379d7e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 60ca097440c7f0964353153cc2700ea4fc229e9ce1d525dd77fd0f512bddc85a
MD5 d1fa319f8ecf7b0b107734551d9d4088
BLAKE2b-256 00219eb2aa21e6ff38ab1ce840489693cdd2d38d2ce0c1876f893ddeec6207db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 63418af0b41d237c570f883d8c7363165bf8a7eba19e3f37240de75f86bdacc8
MD5 e81363e8a79415300d89a17c0e6e7a72
BLAKE2b-256 9035c2dd75026bfaea8e0bbe7d2de96d66f4503241ca92fd51b91cb1df588dc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b6823e05faa96e5b68a4682a94a31c263050299eb4fb6afaf437c16c3d16ef0
MD5 7044843c7a02885661a4e7140956a67b
BLAKE2b-256 2dd32890354db93a8635e6f69762e6ecb94215759eb6229c1222abed237dbc3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 77c373001d18859f622597ae5e32f09a75aeae0f78121fac768c7f6ccac21944
MD5 3f3c2990434d775fbe0c9c1c56dcdeaf
BLAKE2b-256 936dcf17b79d731e4ebff8cf89deebf001a6b318ee9b286587cacbad56bc4b4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 8dbd1938d6b409c33465b5c54e5c7e79a8a2a9763d6983e8f3a523c57d8a5410
MD5 f9c2f9d7119ec999b278cab64853de53
BLAKE2b-256 7e477f64a730b3d97279eddce56e87025aba69fecacff7d804ed2c21501d4305

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b3b3b74c88959ca97d3c4cb9de2fc55381fd96956f7ec36d4b7902dac9b6a577
MD5 1b05b1233ba8deee2a4736d4b884fdd5
BLAKE2b-256 71dad2359c87e939ca4d6c051431b48954d5135ffe2806fbd731252e5e0cfde7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f1408c2dd492f2368ca99ece7ca496e9eb9e6c03f92e8be15a7d3e14d8b37bb9
MD5 2566a9fe8ef344ce04dc308005df552c
BLAKE2b-256 1b2f2b20ed8355a6b5a307903d2775f0402faef6e2406f11ca18a444d7f8bfed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9bb50f1b5228f976263e98b0fb998448908d07955e0d69588c639a477a7b75a1
MD5 97823fe662bce0bcdf741abd48aee45e
BLAKE2b-256 f45a840a937bef77a481b2eee169805ea7155718fe5c6a9132bd4d1fb3046a43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a796db0cab9365f614d7140ab47a69e9bcc64917f6dd70994913aeec24ffd8b1
MD5 23d3ad45bd416b4ad9d0a45c9ac6c8ac
BLAKE2b-256 30932d3c6095f66c76571b888d08832b8b19092782db86b78e9b7aaa72b239c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 4a7b7cd9dc15aa96047565ca06ae49c017fc45ad6cd45fd98f4a926558e09626
MD5 fd6f3e2a9815c00349263ade0d31bdb4
BLAKE2b-256 baf85f1933513b7b00bf166344455c02f7e6d6cbe2904325f54601eb07c6b9cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0678d0234079e36b7e7881d79112f600c5ebe3f8905cdcecb9620a454a26f3ac
MD5 14fe147762dd1918f92e144c5eccf68a
BLAKE2b-256 d00f66bd8a01ca2d8d657189add916a40505240fba2d651df6963a9ef04f2516

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 61e53a1e7c8e7bc848c48fb99862c8ab4765d848851d67021403880b6a59258f
MD5 0de6bc00851a5c79e005d279fbfb7e46
BLAKE2b-256 75688629a9860ec1b9621e4a06ba85c4d04aec42da53ef87595bf68d3cae6312

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb0e8fe8e6737191df7244c1edc33b7f56be26ed6ecadaf827cfaa1873ffe9e7
MD5 64111eaf78e4bddd83563301be8a930d
BLAKE2b-256 6b7c4dbf6aeed616920fd4403d6d51dae749e8cd69760301b3b3d7aad83c6a68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e7d31fe0f465b45b9749cbaf0b242c1a47ecefac8f5595b1d279bc7f4aac0042
MD5 b9d5ef4d8f8f079565327451781a1f9d
BLAKE2b-256 7eb83c1b2b8c72b32ee77ccb3d4ae9675fad267e35dd09f8f1841e3c4592d033

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 b2596668128cbfc466e167d04a93ab055d896f24a404532f23e54f7c69ea95b7
MD5 f9ac34267e13063f26ab11c04306ba65
BLAKE2b-256 7e62510675bd0ecf9df6d3a5519f945936a359ddbdd5f41a25d4e7f168ea0bea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8baab2b11f90c67eba2df1a993e2e7aa85f70c30e072750bcde7239eb2be6cd6
MD5 1b24bb82b06540b37dc0ab8ea5558846
BLAKE2b-256 f424f201f63d9ce65ce0cb1baee9bb6c28fd98fc60ddccc0fa7cb0c51b673d80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6160ba8accb2fe646287dabe342260f162b140195eaf7b7be472aac01871c63c
MD5 931614beeb5542cb99d68d5e5f69c14f
BLAKE2b-256 62c302104dabdd22a78b8f7cb3a65465f63362e68275d6a243be6eff6817eedb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b99327908e62a5640d2557cc12d56e0765354b80ff076850b014476022123405
MD5 dded0747a522b5f3e51bfc58d3039736
BLAKE2b-256 f19797eb1c68ae23eab9d9e0228706feab7e95d974eb59ca83fafa1ee7650ddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 070ebc8a0ba6f3b01294b3f94384c9bf5269ded7e845e6be3ee6494954e13fec
MD5 5b9d817188a728aca8f96a7413b2f248
BLAKE2b-256 493d47170f421fffe67d5c6ccea72845bf711d15e20e92f2bf9fa610d800cfa3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 ed0baed25f15724db2c66e05498592672a77ebc1492c155088b4cd76a0cad2a0
MD5 863feb675251486a3c5052e190579968
BLAKE2b-256 3dac9783353d8539a252c0596788a17c38510d238bf775c366ddf631789e5e5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d13aaeea6250e37ac5041bf4657bc4e7e5d7a28807a86ba3e066598c29a8cb76
MD5 82188d2162d9ba25794bace3dc3437b7
BLAKE2b-256 8c19350f117935a1806686d48665fa8f802dd41503417343b706a76c0a7843ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3c3f95a06aedfbb4a62c659a1b19b7a6f6246a5bed2b177ae26be54b59d2bcd3
MD5 ef3aa2483c6efaea9577f1ee6cf662b3
BLAKE2b-256 683a4df8608a66cff8778913618df051355da17eadb5de951836f96fe3cae008

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cb1f4faec87864799fe29f7ed1e8cb9dabc7135907e731be0dec8a1a3108b9bb
MD5 e5d48e2ce7f3900462ffac71d9512d47
BLAKE2b-256 f2c9d23a91cda9f7560da8d9796e7161d0ba22f30f1aca04271994d6366281e1

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