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

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.3.5-cp314-cp314t-win32.whl (73.1 kB view details)

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.5-cp314-cp314-win_amd64.whl (87.2 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.3.5-cp314-cp314-win32.whl (71.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.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.3.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.3.5-cp314-cp314-macosx_11_0_arm64.whl (83.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.3.5-cp313-cp313t-win_amd64.whl (87.2 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.5-cp313-cp313t-win32.whl (71.2 kB view details)

Uploaded CPython 3.13tWindows x86

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

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.5-cp313-cp313-win_amd64.whl (85.2 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.3.5-cp313-cp313-win32.whl (69.9 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.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.3.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.3.5-cp313-cp313-macosx_11_0_arm64.whl (83.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.3.5-cp312-cp312-win_amd64.whl (85.2 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.3.5-cp312-cp312-win32.whl (69.9 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.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.3.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.3.5-cp312-cp312-macosx_11_0_arm64.whl (83.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.3.5-cp311-cp311-win_amd64.whl (84.9 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.3.5-cp311-cp311-win32.whl (69.6 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.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.3.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.3.5-cp311-cp311-macosx_11_0_arm64.whl (83.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.3.5-cp310-cp310-win_amd64.whl (84.8 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.3.5-cp310-cp310-win32.whl (69.6 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.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.3.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.3.5-cp310-cp310-macosx_11_0_arm64.whl (83.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.3.5.tar.gz
  • Upload date:
  • Size: 27.4 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.5.tar.gz
Algorithm Hash digest
SHA256 4f798aac0319beb695c3ca1a4a6b3fc897292cd0bcec10635e6b7bf7d82dd120
MD5 2d0f3c93d21b1a6360237839003b0a25
BLAKE2b-256 5ee9b23752cdae7ae470845d8e209bc17c3f2279ba9784c798dd828a8de54183

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 bc8a8ebcb5754625924de6e33a4c236808dfb235eb28c9b80524b85dbfb7180e
MD5 c12efca20d85c500452b9863c3a00ddb
BLAKE2b-256 23972cc039ab67e422174b43cf5208e18cbd1c25dc14de6f0def0cb16a0c0110

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 36c5393fe7d0c00411773001402a3f2bf4652618be606bfd1e5ec13decc40fec
MD5 ef4c698a7aafdae1ab6692b5ea5a04c0
BLAKE2b-256 e3ae1a59fbb07d9aba7bd03d9a1593cb66cbb0ccf0e6abbc4e9de01f429cb90b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9f0b3c9eed026af99e89e6e982d44edbdd1f0231917a183781fe059b5b0f36a0
MD5 e0dc24ca22504593fa1ea735cf75acee
BLAKE2b-256 ee51b36b943a0cd2beeb2cac59a800a2de33a267ad16beac5ae134346272e3d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5a441f6224b40cf0b74eb14b852eb8f419cf49b077511b36a377e54e385717d2
MD5 27a60a59a4594e0ba8adfe874cff61f4
BLAKE2b-256 447ae91ca89e33a2c0ec6a48a1ad208c53a0c7b463b9fe709642bc15d0ecc6ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 17369d2c9107417f3dd399883e7a509926d7f7af7f2be183ade22969626a1b97
MD5 ddeffcad7a1cfca6ba544dcae510f924
BLAKE2b-256 c39cc214ffb22000bd6b56344224b0f1198461670e0933243b81479cd3c6fb84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a2fe1138fb06bcac09644cc4175c41e3aaab57a79494abd6a1a9137b523a6521
MD5 1fcfa0751780bbc6f69d7c7e53595546
BLAKE2b-256 7fc4e2ec3bb9a642ae964743f9c3417131e32e6a6401b9857cc64c7bd6b56962

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 38c32ec6b6a8d62c1685883da226b573fa995edb7682d3feee0097ebe145b548
MD5 7067edbbeb7e5859c70e7003db15816f
BLAKE2b-256 11d237ef14f636c1f181e65cfa262f2c6ce69dfd397fed6cca1b38c39286294f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 736266c5894c823aba2c9cb44f3221ca984cb4a4e3aebf224b75820ea1ee5f24
MD5 e095416f67fbb0d78cd1f726f09a90ed
BLAKE2b-256 513b9e2e880dc6bc1573b82cea633ca9d446ed3449b31c0b9ce1030d91c3fedb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07d08233d6cf94ddc4834e23dfd3ccf2d996e4e34c04c266c64d66548d28c81a
MD5 caffe9e69a2d5549598989a3ba7e7c6a
BLAKE2b-256 7c686bd839a6b498a029a4090b4085109a4f757536cee5dbc0f9f75311f6da10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67c731a05a624ffe1261440ef1be4bc1aee375195df8abd30dfcc5a0c2cd7b3d
MD5 49bb2ff3a7e8aa15537b3525f7c46ae6
BLAKE2b-256 5d081cb7c28fc5408e8e29709d35f7b79b91fa05ce96881997241bfd60ab4e33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 a1596e755899e576446ab8fbf19f13be8bf09efbd88adfe636f11bed674c7428
MD5 1cc16f4e500c90249ba9e5957ebcef7f
BLAKE2b-256 53e40e81f1025a6b64430ae28bcf1acb214130d918c71f6cffe73f46de91d500

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 a93bd196fc07b2fe424a1a0b0c04714bef39cb8dc0a1056c5688f5cad5d00487
MD5 a941a3ca09adc1b87eacaf456f8db1c9
BLAKE2b-256 5c615acd8f797743a5fd7dddcc619b1a4bb0a281deb5fd00389603a5130bb97a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d7c9720d64e2c83f72a9274127fc4ce797b6a477a8eb69efb292372a5abbc624
MD5 5fce7403b124708c0e396e8d3497fe16
BLAKE2b-256 bbe84501f46881d3f067f279657b76d5cd110a7e72811ded989cf833d56609b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 424266897c42bc0c1df0a596d9471d32e315cf458f5e461827cc837e89ee29db
MD5 ec940ad7ab76e11896eaf173cf1b513e
BLAKE2b-256 241c1ecc56de97ff582c2568895a30dc9f725c843968b5846f5fcbed2b3cfcad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f006212d4fc8ec330a4a556ec75abc9b9ccb2bbba349a1824cbd5bf38aeffe4d
MD5 769982172c54c707be99b4a16233ddaa
BLAKE2b-256 af7a0a9246ebf83ef8d40d5c7d630c9bf6360896de449fc57c48cdf5eb514037

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d871cf7a660dc5729836f21e2a213e772a3215f6dfb05bf99e398cb49d408cc1
MD5 c5e4667f9e2c66e1f9694c807bb1dccb
BLAKE2b-256 5ed63d91e21325209bd38868f1c0f455174dff0703f7a566db1cf9b6e0e1e7e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 187b979bd039285e635362ab806d4dc1a92a24f30045f15e63807fcb53a3d59b
MD5 806f3527fc410b5c866eeb86c9af6b5e
BLAKE2b-256 fb27b419adf93d1c75ae1c026c66a672a4b93763f7928c70dcf0a5b729d1f3bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a0a72713cd4d1e788bb39d99ed500f4369a86ec31f5be9b2e5ffc994c2de4d43
MD5 67fbf87b60a529da0587a6a6fd76ed0f
BLAKE2b-256 f9afb487730bf6bf95696b6c86e11d56dcf209e976867bb33a434874031cef80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d3274ad3ec3669995ca82e45ec1c99630565caf8cedcd0c5f4f750718ac4629
MD5 bd3f55c326edc95bd108cc3b18980419
BLAKE2b-256 3e936e8e6e0427a37fbdb86b187d16df6062d9a5c56c0094c4193c3446822833

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 617d8ed30955506ed9642a2559311c74c2855ea14fbc10f8d2587d78bb4e1f2f
MD5 d76be46ff882031077f9c42a0e609c4f
BLAKE2b-256 c3cb38993ba1a2b5f35beb333c3bbef81603630e4f3584e75065404c5deb0269

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 74a69e5c5376e7f383b62c15eb36a43e8c06e5691db2e4fa41f2e4ac357c1256
MD5 5ebd456e6c8179b4598694e08aebeb35
BLAKE2b-256 ebae8518db8dedb488e0cd8b31fb53d064a67720450319d3a89508125cf3ceca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 711e5cefa1fbd4882d1a94da2a0bdff4a42c74899f89a73c116bed8ea4dffa87
MD5 446e1c04390df160052bb55cd4c52ae3
BLAKE2b-256 075ed639a1f66dd048a1d7f3cd43881cf9453a313b6211430245f8e6a25537b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 725c8cc36503210c31f64a472de9e5692570155ac26979dbb365af448c0e5240
MD5 4bd1719bcd3b457662b481e52a5ee29f
BLAKE2b-256 94482f25c77c5867bc796293554f34e8e7f0e2cbaa3c422e72780ceffd6dbf5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 49c901df8f22c6a17524af5b0dbf84fa350c852917fcacfe7df4a9954779d220
MD5 c79b02e3ddec7a102e8aee8e0326efce
BLAKE2b-256 1954d6aa69d8b800cd0a8eab05337ee664517f63eec93373fbbb63af61b1b94f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87dccea19f7a8d3340db0abc3d0ebb8dd7b85936e66be62aad732e87b25aed5b
MD5 8c3c90fa2368604873b854962b54dac7
BLAKE2b-256 827a280fb92adcdb44e58cdae6f88eec8eb5d609e3a7c6a38859fa2d04f95fd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2ddf0eb3364d469a72821d5a8637d646ca37aa2d94b416493dddbe366e2ecaec
MD5 92eaf9a74fac799d3e134f102170ee1e
BLAKE2b-256 89b826dd16f5d57e307a3f95c3bd76cf343bbb039035eff004ca2267574ab345

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 c580f4fd3f1c97d4babc99d0a117654f9278a42cc127f5806c42ce8cb11396e7
MD5 43350271a7067899b53674db1cc9fe43
BLAKE2b-256 bf4f574c91d62518f72d4efa1ac85cc92616ca9e3c21e2e9a55d508616e24653

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6e722af774c4c8d53c327cbf6f39dd5514ad0894d350c9c7edd596fff01d4af9
MD5 5676f4b54150be63cfcdd87828a5b962
BLAKE2b-256 53b36fe2879bf80f945084fc5b1b4797941855d2a00850d65852353c86610fe4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 546c05b8e3ed430a9f79bcbded521823b0172d6e2fb1cc391ca8f8a69bbb5000
MD5 d26a1c4517e75ceac9b6de529389647d
BLAKE2b-256 87f7b62f9cb37895c4fc35278743d19a9c4d6c9ff9aaa1afd0f71d80071f4c75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54a06452d532b888938cf887d41b1ba220d1d8e5165bce99d8c3bf53b177c6e4
MD5 6271e4e4d94ad4017d181350c051eb8d
BLAKE2b-256 2ea84db2ed86fb6f0d432f508bec7f728483f3267eba9adfccf5f370e3d0dca0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6c70545f043b7883f6b2a603d558218ac38420f633e8a4707f2271ee0e54d716
MD5 05e83488a4d5b0793d9ff377e238942a
BLAKE2b-256 c4130ecefd8eaac66b3fceacc76760280dfdc0525c43e22f17a8ce69f4a48a42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 bc811d90fbd7d6952513db5b07ae364bc1a67163ac19cf3f36edf48dd767780d
MD5 13071840f2c98065f527cfc9591f8457
BLAKE2b-256 554fb965e502e67e73d8c3cab9bdf6a01541ac24220777933b4f06e68df4ee77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fb0d2ccccf5a1154a5846832f7d58f838e513429f7444b5ceb13cc38c9326e76
MD5 e987dce23fe1f25fb79ae47dd06548e9
BLAKE2b-256 32a9e466f5698d35e7e2e4780528fb906a331bc1ceca609a3393605517be69c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b31ca0de80fa984c831c600655b20f9ba53e97b0122acefbbfa4b80681cd974c
MD5 531e692f7923a6b1849d6f66c3209924
BLAKE2b-256 b4ed0dd3417f1b23cd2cbdc19965138ea7203353129e104947ddc88bf3d345de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 138e4afa93fd47013760632a013eb32018d39002905254be2f64dccbdae163ed
MD5 376039605923ddc47ef5790cb25ed5c7
BLAKE2b-256 d14ff94323d4eb7ff84114f57bd8378d69a2a1ef0096f06ceb66c59258c5ee43

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