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.

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

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.3.9-cp314-cp314t-win32.whl (75.9 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.3.9-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.3.9-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.3.9-cp314-cp314t-macosx_11_0_arm64.whl (88.1 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.9-cp314-cp314-win_amd64.whl (90.0 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.3.9-cp314-cp314-win32.whl (74.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.9-cp314-cp314-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.9-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.3.9-cp314-cp314-macosx_11_0_arm64.whl (86.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.3.9-cp313-cp313t-win_amd64.whl (90.1 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.9-cp313-cp313t-win32.whl (74.2 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.3.9-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.3.9-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.3.9-cp313-cp313t-macosx_11_0_arm64.whl (88.1 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.3.9-cp313-cp313-win32.whl (72.8 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.9-cp313-cp313-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.9-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.3.9-cp313-cp313-macosx_11_0_arm64.whl (86.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.3.9-cp312-cp312-win_amd64.whl (88.4 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.3.9-cp312-cp312-win32.whl (73.1 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.9-cp312-cp312-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.9-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.3.9-cp312-cp312-macosx_11_0_arm64.whl (86.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.3.9-cp311-cp311-win_amd64.whl (88.1 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.3.9-cp311-cp311-win32.whl (72.9 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.9-cp311-cp311-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.3.9-cp311-cp311-macosx_11_0_arm64.whl (86.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.3.9-cp310-cp310-win_amd64.whl (88.1 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.3.9-cp310-cp310-win32.whl (72.9 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.9-cp310-cp310-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.9-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.3.9-cp310-cp310-macosx_11_0_arm64.whl (86.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.3.9.tar.gz
  • Upload date:
  • Size: 29.6 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.3.9.tar.gz
Algorithm Hash digest
SHA256 d8ad628bd12ef5b8e92fba94a03598a8bb87f21ad2cca828bb574fd1521dcc3b
MD5 bbe91fe601819ed09c62a577a90911f0
BLAKE2b-256 2d2583841d0aa44997b4cd32b28b7116d6303ccda48006fee25f194e08e304d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 5f062d813892641818f22f9a175b9b9a401aaf68f2ef28eb81dcee6ad3718112
MD5 c5cff66c87817e5f517663667e530122
BLAKE2b-256 ee8e8eeaa75f87f1b60335d29e604f9cb012d0be26c786bdada30a4d0307693b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 44aa01c119e2e37ff3a20d478a378a980d92aa101cd1382df8d98993d8defc45
MD5 d5e11447307ed96a2dd7aa109ce6b5a6
BLAKE2b-256 16dbdda2646bfa29badd400b5a55753b7a70b033af7229d367e4f4a9e75cdcfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 41cb4fe13a740a5cad84210d74bc2be83e9d20d47b9de7757eb3b341fad37ed8
MD5 5eb6d7b6182dc82bec00555b3f55139c
BLAKE2b-256 38323e9c7174620427f38880f7ba02409809588c4b925620d1bb7e07ded1b1fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9da86ad86ac676fc5331b4575f5972b86ab3f0ee781d1733ca9be3d40686e0c1
MD5 e6e8449721a6064af1861525f2049c5b
BLAKE2b-256 d7c37f0bcfdf2a1bf8f5f70932b7a3416c56ce3a718b6cf69f4663ccc688b784

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a4357a5dd345722ef85dfd1a1eecb4b10bec49d859dfc7242f858f87b47f45e
MD5 5f6db79344710ed1adbd23d85aae787e
BLAKE2b-256 5ccf6b52fc6e77180f2c9f894cb0671ca77984705a1ca367ab646dba7fa0b27c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 0209afa591c1bffa9e8e3016b6d1ec281b10aed12241684d7982dba369d3e37c
MD5 25194f4f0447acd31a38884ec7db6679
BLAKE2b-256 03080b5239e9c10fe155e464e15348165e772969ab7f1750a7dc639ed833654f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 e0c2db115475343a027962ae270931a662b3370090565c26d882e402dec56099
MD5 4674dcf31154b17732a1244788b510c1
BLAKE2b-256 96e5e02f34078eeb9b9625e4acfb62430311c3f36be95611fc3740fe01de7d97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0f9917ae352528fdf8958aaf7488b3a1b8f47840f6aceff8f2406f1b1366a263
MD5 ec2592563fff9ee3da22785746cffbf5
BLAKE2b-256 b2f07391669f3ee977a6a0be76b15fb102200f3812c6ee1b6450d06f19873a2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 39460207bdf9cea7dc0cf41182aeefb481c774771f825ea5d72b1cc80106aa1e
MD5 488acb360955dc5f8a771e08c158e369
BLAKE2b-256 095bcfd37b2e2d8024263336347b451291efbcc2fa2bf42d0567bc0c42af6237

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 372a63c94ecb73f96ca851fae9289c6f777e58b5617a7b4bf3c4bd0df4deb0c5
MD5 a086d03af0f8c1b8bae2882b1185794c
BLAKE2b-256 8dc4717b053f2054c2248e0f67a812b8173dc0c309457129932fea77d78af37d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 24712e1eee64e71fd8d43baa5abf8863222b1ecc37c43270f4ac214eb875e385
MD5 a06ee5b0fdc20af1db3b1600a6a904db
BLAKE2b-256 e66567ba86869b55904862ee1c2e5bc9985d62c2f0d916d07191401b89bcca38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 7aa18577028cc12843a4b6240928d9619fe328dda0702db1400d4395c2ad77fd
MD5 62a600f811496097c08563ad42ff0d8d
BLAKE2b-256 a4d422003fe2fb95c4e4738031b684d398066c6de77edae206c66df02a3965f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a78ada4b5e849448870ca5b292b3e57ebe0902e8ae48281cf046a60832982c0b
MD5 10bf467da9d604dab9c79e8cb08fa770
BLAKE2b-256 4df1e976bb4a6326ed972599ae8dfd3b8c8cb8599384b57ddcc8d50423fc139a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 657a6a8685ca4faf8283d14242f6a204f5714b7e9aa18a67225eadd518ed2ea7
MD5 d60bb78eb75c78886f55a914134177db
BLAKE2b-256 e812211967ab4fb524eaaeda6b05813610bba8329a0524900880c385d63a26f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 85394e1f077e4c17ec14ac52c75036c05446b420ecf0cc51781ccec3fdb1b5a6
MD5 70cd759009e6b129de17f683319e8969
BLAKE2b-256 4f9206304dbfa605e654db09af8b558d1e27852810ccdde866c8d063563a11a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 075450e7cf1fae92485e8ece65658728bb28d6263bd5db0de04638de9bf3e0ca
MD5 a7d1c3a583d6c4f65f6b567d26296e74
BLAKE2b-256 59eac4dfd0bb737684c1afee7609e7e9b32f2032ff90e528fdaf1803b4f047ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 4cb18778afa640bc0b7b3d8e5016592e3af228188ddcdf8f4f355c1980e29e05
MD5 f7fc7e6537976182fe1aa3b267aaf47d
BLAKE2b-256 0430dae914304a11f0736faa5f3018e20ea54422bb5d4d1853c8b75227eb132c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a52fcc81afc8cee623697eb919398499cb9d9168c03cd5b43074a37f41af532a
MD5 36df07c62dbbb39af1a256700d8c4256
BLAKE2b-256 5156595cd8b9e99dfdd1a02316ca231abd729159b66a4de3e5c7ad792e11bf29

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 419579ed275438160d0d329028096becf679c829b0e814b8f31401fbe3715fe7
MD5 7178ca370685424faf9777e1153506b5
BLAKE2b-256 663514a5788403e0041d267c2060dcd18fb4e811d738ee362a78876c727617af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b1104896e618e59ac68efa5a6cef2b09eb17aa96559853295f5aa4637892e3c
MD5 118edcd265197711dab2f53e49af0117
BLAKE2b-256 5fc45216fba6583d01aca459c4f0bd2528562a49268c37c98ebe64862991755d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 52f0b0872e62092799df26a571e715a84ea7af8d4926fe1704cda1bf2284dda9
MD5 b33fd3f3b44518effb5db638988c3f90
BLAKE2b-256 2f4fc9a573eddd54dbdefabad1acda24e5da8c369e61a3f3aed6db1fa0a92a96

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 1a966ea602652c9bb22c7cf81aa6266509100579a915d34703db89764d16e9ad
MD5 43b5f9d683d2302ed51d1a827a8fa703
BLAKE2b-256 735e8c19a6dbea2461e26866d24cf6d2b2da8227b4bc354b7d51557371462809

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1600085cbf187bc4d81fac4847fa79f117e4119363629cefa8a8e95fc21e3505
MD5 597b11cbbec98cbb6c2852a7ffa3a7a5
BLAKE2b-256 10b3b6ef54154e29b38b44d3b437e7743f4771f0b3b1ea30728b821d3ef74a6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86ee37c11816753a104ef8ac16dbb8af709dc91d2db610fb0d0a7a2a32ac5a16
MD5 69ecb5420574f83c8fd3f5d5f773d50f
BLAKE2b-256 78f83e2e0ba9e3b6a5ce02640be3be1437184dcae49438c5fe538f7c9b8cc744

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 760731cbff8d9cb37bb309b928757aa48ed51aa73621c5e198a928dc850f3119
MD5 d16ac134c0cfc5827a76879d26a58665
BLAKE2b-256 926f5a93bef7630dc87c398e51a3b5a2ae036ae661ab5c8d34fe17d5fd171218

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1b2141db3b94d07fe6ca2d9e10fcdfb12d12f68b8175d251478540f6b376bb00
MD5 c859fa66c2688fa9d3841b8f991d66ac
BLAKE2b-256 701c0f391c97e694edd727b7bef235230faea8354781a409259dfcad282f5d5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 877e73e077ff18d43d4579cec19d93ef27741a4c9813a24054d60cbc54236c05
MD5 9812753640b98c49a1495bc34d65ec1c
BLAKE2b-256 b41de1c8abaa6e1ff2b3e2b38177c707bdaf8c2ccb4d61f68470b6abb0a602e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4d284b61b2c90f9a1fe2b6fe4adcf9f843bd637d8fd87faef20ced4e22bbfa4d
MD5 a800b8efc9840febe5ee9eace27d5899
BLAKE2b-256 06097ede896fe1d2379bcf05006e73085207bf60458d9f6dfbe31d102bd9109a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b74fb9d59f45bd4a3603476148efc83bb8a35b9b6d63a6e744fc1545c9745856
MD5 ed4177566883aa6276597e800e10f0c6
BLAKE2b-256 9c539b08f4fa67c25f50f0332c3f98be72d65985d301799f8406d3845bfe7b19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0d01fd58eab91bdff924a82663e4038df8bdc6e6490663db2003cb81158b27d6
MD5 7b8fc0cfad4438cd66540c0e00372aea
BLAKE2b-256 7cdf6d728bc78e01135ab04cd6c7bb5ef8eddd2719512d23b186ffb737e13421

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5464aac9bc6f06bbca36de10b9a48fe8fef6c42e8af53f5fd9504c1c2802e9de
MD5 fe8b7c86695f820d1a764e0e81219d37
BLAKE2b-256 69fbfe9b7e0597a0ca5f42f78e36b192a7515e34f9acd616d6a5bb432092a7a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 a27c35740f5f3a011962627dcbbefd5fd784bc65ed28b103575f16345cb8bd1f
MD5 c5e5463cbeab325e8ededf157b6d978b
BLAKE2b-256 de3f5205bcc75337fdd334120c89b4d32f2ac3af07636a91354a33b3e3f58be9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 af8ad16e64d0d6a47709ed3bb55b735c8f9df0eddc7f3cc771b7ba848fe45d18
MD5 fb0b2ed29439875944ecfaa74c9a94de
BLAKE2b-256 b8c244a4d2802b135e3704e1f184f081ee52b16c334bc1f116e6b5600defe6a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6cc8a53044d912f740ec7e5edf28d654f286e4b2103536def30f04732855224e
MD5 678b3b3bd2cbef6f7daa97151e487025
BLAKE2b-256 5212f53910a309195fd0240d161901df8eb395f8627a296f014af449029f0dd8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 591de19b981f9149bcedf68a328f5bcf8e88d7f8efe618a606e3dae36bed1ce3
MD5 4c352f0c854226164d0f8437022b83f7
BLAKE2b-256 880126c9b157416a28f0d1b80704d6c4ce490abc277860a968514bc2827893ee

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