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__.
  • When combine with other metaclass, be ensure that the parent metaclass has no classmethod that can set subclasses' attributes. If it has, it will fail on new metaclass because the new metaclass you defined and registered will be immutable.
  • 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.2.10.tar.gz (26.2 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.10-cp314-cp314t-win_amd64.whl (86.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.10-cp314-cp314t-win32.whl (70.5 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp314-cp314t-macosx_11_0_arm64.whl (81.9 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.10-cp314-cp314-win_amd64.whl (84.5 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.10-cp314-cp314-win32.whl (69.0 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp314-cp314-macosx_11_0_arm64.whl (80.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.10-cp313-cp313t-win_amd64.whl (84.5 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.10-cp313-cp313t-win32.whl (68.6 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp313-cp313t-macosx_11_0_arm64.whl (81.9 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.10-cp313-cp313-win_amd64.whl (82.5 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.10-cp313-cp313-win32.whl (67.2 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp313-cp313-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.10-cp312-cp312-win_amd64.whl (82.5 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.10-cp312-cp312-win32.whl (67.3 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp312-cp312-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.10-cp311-cp311-win_amd64.whl (82.2 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.10-cp311-cp311-win32.whl (67.0 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp311-cp311-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.10-cp310-cp310-win_amd64.whl (82.1 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.10-cp310-cp310-win32.whl (67.0 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.10-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.10-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.10-cp310-cp310-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.10.tar.gz
  • Upload date:
  • Size: 26.2 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.10.tar.gz
Algorithm Hash digest
SHA256 c675d2416f60ed277f9477644f575f49614796be1cdacbb98d689507ada31539
MD5 1ba35710da47398da00d0a211cfcf2d2
BLAKE2b-256 f061caebb942c99a549696f902eb161342f99934397a7ad3648ed9881a5e2729

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 4a3c3b0cdac6bc7c77ad9e6fc2a2ca289a603b0cecb30af03189986a710ea16e
MD5 2bb9f88f199efce66078651d1b14ec48
BLAKE2b-256 41c9e45d9e0ae5864c763683b43d5673ab402f17913281b33f85031e0d0a9602

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 cc621de2b69b43eae3a47475360f453831597d96b2920f27b8a0df691c8911bb
MD5 9ef74fc2168ec706253a92b3b7b36233
BLAKE2b-256 9b1ffc10bf06588514461e7a5cfa4f744f0080f0d20908c35784cc33d19d3223

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 af81755ffd601d90c2bfa82ecf852369919253568ad605ec09a2f42792993465
MD5 108d989cfd6dbd9790375465edc609e5
BLAKE2b-256 d4d25bcc15ce9c7253c6f90dab27affc71b73cbc7b9b78f2397e06167faec16c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8534a253c4ac56c1a896022182582cfc398aee71b385c48bb92ab2673db6b99e
MD5 dc0eb814b7fb6e270bf054ee1ecfd508
BLAKE2b-256 60cdd631b280db633d8ae5a56e3f62e305255b7234309ca99df504b914629b10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c606af6113d93d7be67e46ddbe80c72e387252c3270b61ac8f98c18117dea2d6
MD5 3769acbb5e9b7afeb5d9df08bc01f7aa
BLAKE2b-256 278978f3535720a4edd33cbec6c85272738ba240509189747d3d41613e31b8cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a5c8e16e015dd4416b3f93183780067c4d9b73587a59acb2747f60428b297481
MD5 a99709d44a2230abba5b3fe41ecedd2c
BLAKE2b-256 6a06a2dfe674ef210df3a923d96c1594797255ead2308f71c1a8fa8b01aebec6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 34fd26bf5f30ee81eda40d1177cee21b231f6504ea45d73d5e7d710dc147f70a
MD5 72cea68c2a2f855601ad24c6dfb087b7
BLAKE2b-256 d5da0107cb6fa054919cc573735457a5c8e2fb4746bfb77e22e3eecda9716d6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f5bdc8d1a5e30138079ce310f8a3c07a132c790cc273bc50b5ec473116952a8f
MD5 5ce9a2fb1cc513a86a779c7d28f6018f
BLAKE2b-256 d2612ae8e9173e12e889740da005cdcfb4605ad8071e2b4ef5d2b9f41189ec5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ca3906b6b3b5cc376095a384380d1170f43948d3d427285b4df4f091b3381f4d
MD5 a6bcb964e4cd4853db09f9752de43a1b
BLAKE2b-256 822663f6c9861549f3555b8fb66b2946fb3ebbb6cddc2df7f0e8e848457419e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51316dfd8417255d2876ff89fefb1752ce1084542d45725327f381b2ea33fd4a
MD5 60925dd46d1445eba7a0b3c9aea8c359
BLAKE2b-256 4ea16b2f1c3563cc6d125fa67dcf221835875dbc55f428f8979ad3d36703c75c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 b3a965e4de8d106cb7289d927a88cc7620d118cf2fd08ffdecad60c0a84ac203
MD5 7e4fdb2e3183b79952195327dbe84157
BLAKE2b-256 fd16d50bfd9bb7cd126e0fef7caefb03aa545dde99b0a4261e75e0b1d987dbf7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 35f508c814e90c09415a10f52c474b474b80435cdd04a857cab4d8e78452a5ff
MD5 b4822b09a37ea2715006d223d787efc7
BLAKE2b-256 ec95e8146e2694005dd50d5013c0e4b87fb83a99bfd307b1caf6404cf7ab01dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6f0aeb017a6c6ee79a2e3bf6bcf87edf24c5842edb64c5564eedf6ab8d606841
MD5 2e7c938863436cc2588a273a1ead16a8
BLAKE2b-256 6b4cea9201e3a0e97eb89b73c63a2da506244c282b373dc83ded8c8976010d0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ad624a7832f8a29e5a00df40e5918dda8214dacc76e28e526b9e6b9a1fd2525a
MD5 5b8d0f0e19046bb04050d4517d8cb148
BLAKE2b-256 0398e68abafe1560e29989b14ecaeba1ccff1754225e5db366866fc70a68bc66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ed84c95ae2c201c16e8ba07528191a76a65c5aaadce2a9c55ec9a13db1a465f
MD5 a2294115ad034aadbd14532656c6ac63
BLAKE2b-256 7e1188e82f718ac6d7532e3ec26b4a398e37d6b1580f2e8c9f697e127c499e6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1f499043a278cdd47437398168a691371ec7bbe20b0381524a4f8cd1e9bbdca9
MD5 ece5118e0d3fd894a86cfd7ea459ce42
BLAKE2b-256 e9d5dd7caa98d2f535eeb9bea02a5ce79fa2e3b11412f046cb2ef8b8fe7ef9d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 2b64c1a05ae6b4da8d5dfd2e95ad8079c644cb6e216b4e3fdb22ea8112202b42
MD5 2fc704584edba6c5a059ce50a7c10d9d
BLAKE2b-256 e597aa46969a3da9b1c565c121ed968a5018996748f6ef782b93d4194e77587e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2b4f6bf1dcbb7cf49b9f288586f10910bf4a71bc00740e1abdbfb7c61e5b0f26
MD5 45f8a54e97e3c8ee40fb99daf6ce0af5
BLAKE2b-256 298553a06c34f2c357d292233d2e428a303587e93cd96c46889d68fbb8bf519b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55c11e470700c8d96bc361c5e4ad3ea9601cd210840675e2e0ebd38170701826
MD5 e9d106ae133ae4c8352ca0f335f01c53
BLAKE2b-256 7aba60b574822dc1665059a0632841c90204e1005cdbf70bfada1b17b6bbb4fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eb725a2c54e9f810d21a87f2590eb7f6cb0bc0281a0bc137dcbd18172116d69e
MD5 1d2168a056bd3ef1e6a809809a893ba7
BLAKE2b-256 fed80e4a3a2ed8bc1a8c722b60d4edfe194e874bffa15422d3d7e6a979bf976b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 166ae681942d9f941340cc54ee2b7bbd93cccbacff173f19da4b9d9e35ddc2b7
MD5 db46ab8482b8afe94507aef956791b2d
BLAKE2b-256 b62c9ed46a42eec25beb144fe8647324fda4ef4ef139f882a35eba1ac8d63f9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 37349f0373555880f2eaf3ae9e72189dacf5f805fac4149d1bc5bad9ef245eab
MD5 440ff1408ad0e7b8a3d751d513cc8efe
BLAKE2b-256 0be48d92a3d68e4b355402509ec46a43e1f4ed1c7aefb9c440aa6c6fe3961c1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d78355cd7d566a6911f0c854c8af857cb113fbe82566a5e55e12c104244394e5
MD5 8147824fcc41e7a2419657716b8b4390
BLAKE2b-256 521fce10e0ddb34336fe4193e02f227d52f3803e0b80474b21d348afe3081864

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da11531d56b102bba2007a8f40e92c0c1c0fc4cea91b2c5528d397af62f00238
MD5 d69bc31a73d1edbabecb149174816f54
BLAKE2b-256 c5018eb6e789ed72fea7f9eba373bdf6c74f98ef8e43660191808f5ac119c2ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a46206d2b9d66eed858633afa686d3c9d8b5618dd7b7806db44aa2fb156db3e
MD5 26a4ae1284360201e2ab8ecd069de03c
BLAKE2b-256 306cf89a2e88d959ac1379e5dcb4c57a7ac5ba49459fbb82274a396c36af3734

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3d77c9d213c542bd8f34e4085b2b8deaad6c103073e7363a4ae6c116534ff44a
MD5 7b9f292024690cc5de5dbf3e5dada25e
BLAKE2b-256 bd68e999d129dca79dff584b8794365ae28e3c992f0eab220213fcab1fc16a8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 9946d0224338c26fe97ee8a5a3249c30410d18c879230b89678e5464c279a27b
MD5 081589545428f50e0f7c2937338ea26a
BLAKE2b-256 9fa995e44b5408387458b017c090db17c34c2deb487d5572a68fe45a6af00494

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4729065f124ef7c24463762539fb4b908b4b1eb0a207893e55e2668c713802b6
MD5 8e84914ba76552e1ce060983cec0fe9b
BLAKE2b-256 fc6585ce60fedf81b72b0654b3110f4e1d15008fa380ea944ba00a59a44be5d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b1061ce778275e114c068d64ef38ca508f04fa4172387362adab1d0582c5601c
MD5 cd29ed478e42b64b96041322e1904314
BLAKE2b-256 9208d71f08b9f233836d6ccdc3e1310f76328e08f706729e4f6ea2b4c3e12794

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03bc39ef4d28b89376e77f293f9cbd4afb1b552ef2ab3b1f05984d8eb7880571
MD5 3871c1f2f14264a729053f9e81e42029
BLAKE2b-256 fae3cdbd25b952726b4303d28031f24186fd0d499365b8a5907d579dbb72ec0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8329b4a26ff73ff6396839c288e46a754aec799d7e00ce96c29bf841cad79054
MD5 3b2a828be986a8729ab48577cf0e33a1
BLAKE2b-256 2173336e9a6fa88c4738991b0908a542d38ff4a9144c8099936276150df88c46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 8dd29e32c10e1e5685aa471d7a786eb86fba0f0a27af3c9362e23e370a30abe6
MD5 73cb1e41a37bca62692fe875aca8e2b0
BLAKE2b-256 c21ee68e51566f7c27a3d091d9acd520540115d2f0960905d44d5b9a991c5896

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4a0e0f8d76f3fe33b7ea1c0419575357c6fb16d2df5ad1c56c0b6a875af71d7a
MD5 0d6dda261cd5b68d8f3efd9d476f3a70
BLAKE2b-256 7d021018b7f12032b82b48e64ac358c33cc0b9bcec817ce74bc9be72e2cf8c27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b9e7f5228b65bd343ef0bea7637b33216f6d3747b6424d86112692712db1de38
MD5 178a020fabc7f03bdde5fc889535c209
BLAKE2b-256 1bf11e95ab1a317be7eee514afbf54cf82f0412b72d3a185c97ef09ace0e7836

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.10-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7364834b4a29e87020e6a33448703efe4363598623443c29d6ce9d0b95270c4c
MD5 ebc9cf245d48ff4dbeb10254a4a83aef
BLAKE2b-256 95f3fdd83d3ce995b7f671208b86e54e0b516e58195a0e44495d33c29e1f600b

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