Skip to main content

A Python package that provides a way to define private attributes in C++ implementation.

Project description

Private Attribute (c++ implementation)

Introduction

This package provide a way to create the private attribute like "C++" does.

All Base API

from private_attribute import (PrivateAttrBase, PrivateWrapProxy)      # 1 Import public API

def my_generate_func(obj_id, attr_name):                           # 2 Optional: custom name generator
    return f"_hidden_{obj_id}_{attr_name}"

class MyClass(PrivateAttrBase, private_func=my_generate_func):     # 3 Inherit + optional custom generator
    __private_attrs__ = ['a', 'b', 'c', 'result', 'conflicted_name']  # 4 Must declare all private attrs

    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
        self.result = 42                    # deliberately conflicts with internal names

    # Normal methods can freely access private attributes
    def public_way(self):
        print(self.a, self.b, self.c)

    # Real-world case: method wrapped by multiple decorators
    @PrivateWrapProxy(memoize())                                   # 5 Apply any decorator safely
    @PrivateWrapProxy(login_required())                            # 5 Stack as many as needed
    @PrivateWrapProxy(rate_limit(calls=10))                        # 5
    def expensive_api_call(self, x):                               # First definition (will be wrapped)
        def inner(...):
            return some_implementation(self.a, self.b, self.c, x)
        inner(...)
        return heavy_computation(self.a, self.b, self.c, x)

    # Fix decorator order + resolve name conflicts
    @PrivateWrapProxy(expensive_api_call.result.name2, expensive_api_call)    # 6 Chain .result to push decorators down
    @PrivateWrapProxy(expensive_api_call.result.name1, expensive_api_call)    # 6 Resolve conflict with internal names
    def expensive_api_call(self, x):         # Final real implementation
        return heavy_computation(self.a, self.b, self.c, x)


# ====================== Usage ======================
obj = MyClass()
obj.public_way()                    # prints: 1 2 3

print(hasattr(obj, 'a'))            # False – truly hidden from outside
print(obj.expensive_api_call(10))   # works with all decorators applied
# API Purpose Required?
1 PrivateAttrBase Base class – must inherit Yes
1 PrivateWrapProxy Decorator wrapper for arbitrary decorators When needed
2 private_func=callable Custom hidden-name generator Optional
3 Pass private_func in class definition Same as above Optional
4 __private_attrs__ list Declare which attributes are private Yes
5 @PrivateWrapProxy(...) Make any decorator compatible with private attributes When needed
6 method.result.xxx chain + dummy wrap Fix decorator order and name conflicts When needed

Usage

This is a simple usage about the module:

from private_attribute import PrivateAttrBase

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

print(hasattr(obj, 'a'))  # False
print(hasattr(obj, 'b'))  # False
print(hasattr(obj, 'c'))  # False

All of the attributes in __private_attrs__ will be hidden from the outside world, and stored by another name.

You can use your function to generate the name. It needs the id of the obj and the name of the attribute:

def my_generate_func(obj_id, attr_name):
    return some_string

class MyClass(PrivateAttrBase, private_func=my_generate_func):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

If the method will be decorated, the property, classmethod and staticmethod will be supported. For the other, you can use the PrivateWrapProxy to wrap the function:

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.attr_name, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(decorator3())
    def method2(self):
        ...

    @PrivateWrapProxy(method2.attr_name, method2) # Use the argument "method2" to save old func
    def method2(self):
        ...

The PrivateWrapProxy is a decorator, and it will wrap the function with the decorator. When it decorates the method, it returns a _PrivateWrap object.

The _PrivateWrap has the public api result and funcs. result returns the original decoratored result and funcs returns the tuple of the original functions.

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name1, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name2, method1)
    def method1(self):
        ...

    @PrivateWrapProxy(decorator3())
    def method2(self):

Advanced API

define your metaclass based on one metaclass

You can define your metaclass based on one metaclass:

from abc import ABCMeta, abstractmethod
import private_attribute

class PrivateAbcMeta(ABCMeta):
    def __new__(cls, name, bases, attrs, **kwargs):
        temp = private_attribute.prepare(name, bases, attrs, **kwargs)
        typ = super().__new__(cls, temp.name, temp.bases, temp.attrs, **temp.kwds)
        private_attribute.postprocess(typ, temp)
        return typ

private_attribute.register_metaclass(PrivateAbcMeta)

By this way you create a metaclass both can behave as ABC and private attribute:

class MyClass(metaclass=PrivateAbcMeta):
    __private_attrs__ = ()
    __slots__ = ()

    @abstractmethod
    def my_function(self): ...

class MyImplement(MyClass):
    __private_attrs__ = ("_a",)
    def __init__(self, value=1):
        self._a = value

    def my_function(self):
        return self._a

Finally:

>>> a = MyImplement(1)
>>> a.my_function()
1
>>> a._a
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a._a
AttributeError: private attribute
>>> MyClass()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    MyClass()
TypeError: Can't instantiate abstract class MyClass without an implementation for abstract method 'my_function'

Notes

  • All of the private attributes class must contain the __private_attrs__ attribute.
  • The __private_attrs__ attribute must be a sequence of strings.
  • You cannot define the name which in __slots__ to __private_attrs__.
  • When you define __slots__ and __private_attrs__ in one class, the attributes in __private_attrs__ can also be defined in the methods, even though they are not in __slots__.
  • All of the object that is the instance of the class "PrivateAttrBase" or its subclass are default to be unable to be pickled.
  • Finally the attributes' names in __private_attrs__ will be change to a tuple with two hash.
  • Finally the _PrivateWrap object will be recoveried to the original object.
  • One class defined in another class cannot use another class's private attribute.
  • One parent class defined an attribute which not in __private_attrs__ or not a PrivateAttrType instance, the child class shouldn't contain the attribute in its __private_attrs__.
  • CPython may change "tp_getattro", "tp_setattro" and so on when you change the attribute "__getattribute__", "__setattr__" and so on. If you are fear about it, you can use ensure_type to reset those tp slots. For the other metaclasses, you can use ensure_metaclass to reset those tp slots. Also, don't set those methods on these classes in your code.
  • private_attribute.register_metaclass must be called with the metaclass which supports weakref.
  • Don't set __static_attributes__ in private attribute class, or it will be removed.

License

MIT

Requirement

This package require the c++ module "picosha2" to compute the sha256 hash.

Support

Now it doesn't support "PyPy".

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

private_attribute_cpp-1.4.7.tar.gz (32.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

private_attribute_cpp-1.4.7-cp314-cp314t-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.7-cp314-cp314t-win32.whl (75.2 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.4.7-cp314-cp314t-macosx_11_0_arm64.whl (85.4 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.7-cp314-cp314-win_amd64.whl (87.7 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.7-cp314-cp314-win32.whl (73.7 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.7-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.4.7-cp314-cp314-macosx_11_0_arm64.whl (83.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.7-cp313-cp313t-win_amd64.whl (88.2 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.7-cp313-cp313t-win32.whl (73.5 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.7-cp313-cp313t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-1.4.7-cp313-cp313t-macosx_11_0_arm64.whl (85.3 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.7-cp313-cp313-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.7-cp313-cp313-win32.whl (72.0 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.4.7-cp313-cp313-macosx_11_0_arm64.whl (83.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.7-cp312-cp312-win_amd64.whl (86.1 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.7-cp312-cp312-win32.whl (72.3 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.4.7-cp312-cp312-macosx_11_0_arm64.whl (84.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.7-cp311-cp311-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.7-cp311-cp311-win32.whl (72.1 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.4.7-cp311-cp311-macosx_11_0_arm64.whl (84.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.7-cp310-cp310-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.7-cp310-cp310-win32.whl (72.0 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.7-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.4.7-cp310-cp310-macosx_11_0_arm64.whl (84.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.4.7.tar.gz
Algorithm Hash digest
SHA256 459662d36813adf3e429739170b56d8b42522a1c87835d556e56f012bf7958a7
MD5 460ceb626635f6b54304ac6fca26503a
BLAKE2b-256 689657bd827824b92bdb168a39e2255f46abe2c79c0787df2ef5e49317495d78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 bb6a1e1db6ad43a322660c1b21cf3ae5510ac05b76218c4ec2e60aa655f53b1f
MD5 3680b444fbfd1ad4e5914a138ac1e486
BLAKE2b-256 670c6789ff36387e549b7f3ee9256b84721b439c395c278c88c083030adff9ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 2aa020b5b30e6f4f393e0332332c68a597f0722992a23f7614de5a1f3f8daf69
MD5 6f3c6734ba419bfd29de3c0d4161387d
BLAKE2b-256 356af887af52e435ec664f20c8c108e658268fcc54fc68d135db5c9cb97dd801

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0a6780e6ad248801f80136f03447024efe2ad490f765fca58d42aa75de74fe19
MD5 c172b1063da9e942e6e668fe6540dc54
BLAKE2b-256 85924d0cdf613797343f91c0b80f21a025f82bf490657a8ad065e5886bf126a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9892e3ced3c3989813b5ec66a7e310dd11676076410292f8a2098ab7384798a3
MD5 94433f266c27765a16e6e6aa962f7be9
BLAKE2b-256 ec2a49118e50564cefda79372b665cc7bcfb2ebfc8b35137868c7e8bf9a2a4a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2980139a0bb9918dc0a8182a0b8ca13569002606625fb8cebd99c29f220fbd6e
MD5 99df80be72b0c2f2cec79cb767e279f6
BLAKE2b-256 3a806020d06765e6bd935ee401b183bf994809df87eab893adb0fd6e6b443d0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 cc4d1f9b5b5f9546f458ae3aa7ec918c11dab7a3ec1d72162dd10ec2fd433bfd
MD5 05fe3230e16bc7e954fc6d6aed4ddf15
BLAKE2b-256 116b8dc24f3504676f2b5d7ab943162837667583e152a60b08d4f915f7f0839d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 78ede54cb6e84ed4e3c4eabe19ec783262605d9d9a2540b7988546b2723988cb
MD5 a23cf61c24f2427f60058a8e9706d59e
BLAKE2b-256 ea27503e2c383867f2f5f05fbe6eca36aaa6c3f29d0a29d24a4d0e5f2e27bf1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 057e46ef2bae33afe0055946137c972b1d5333e444ea27c333729ca164565b8c
MD5 0dfb253397f8a3604ffc44a10652f211
BLAKE2b-256 9d4529d16d8f0795267d143ba20ccdcf425bf5613f3ef8f5cff33a174367e3a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea52b88e4846ad30841c1f36abbc48b1d71d00c21adf1279dcb9629c48b259a5
MD5 3b8d93795ba834d7b3f50111f98a2bfe
BLAKE2b-256 a939437acd558402826cb9dbf88479ae9a2b82eee32be33d6cf54354240aae74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e585f5e8eb1ab3d81dd840223917e959b10fe0471d1e0a63e308afead66ecc3
MD5 f9c707259b50d995556d263126427fba
BLAKE2b-256 e3ba31bf18d5a92cb615e00ae2ac4399f7bcb9e3a509c2295bf6a79395449201

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 5340eb1c5651204abce0aceefcbacaedd621cfe61db9ea14416b4f8ad1b116a6
MD5 cb3468cb9a41d69a160832cdb352f34c
BLAKE2b-256 08b69d5d2503a687748dbb1a4e552b44b1d617e75bf977943267aa8ba26f523e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 0fd1d2a52b03284a927d0ce6d820d9e03ceeee7b3a8ebd47e4c7e54cf22e666e
MD5 1d206fd5ea0c0bcd7aa8b559a96bef12
BLAKE2b-256 8cdd72e7bd15f0029dc52d5347933d3419b998c2f2eb15676d613e94b9da358c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e9a3470cc1e2fe529d87d9328c56c2f91d3bab237b44ada1801d755899786502
MD5 d01e59cb7e77fd678fd6f3e248cebeee
BLAKE2b-256 580361d7cc15d769a936ad1639cb7f8c3416fb0ae2297af6092213d48526a480

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ab38bddf37794afbc570400b398debd96ed73b2ad23b2bb76462513c1e2b272c
MD5 21f2c8a8755f2541518ec3980ee06252
BLAKE2b-256 49e0e40a0a4258185eda050fc1cc827af3df4353d18b22d016c50ff87fdd3300

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e91735d69bbd270ea9576f77cf3ea795001fad0c4894a6596de3e499851d3ba
MD5 b56446e3ca445cdb8c9e85dc29c93622
BLAKE2b-256 86c95d76a78038a5d97fd1a2744905905ba4778f4555648716acf4ea3445d3f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1654c1aae3c07f2ca322b661bdf2805cb2357262212a2b46ea25af4399fa11f9
MD5 3913ca67657300704d4d98dc879d22cf
BLAKE2b-256 48dd7b7461de24e52e1efd8af926c5bfa596eff6c89eb902b487d423698c68ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 97226b3a43212d8e656dbf941feda56aecb9a42e30f9e085f228a5924b5ca720
MD5 e95435bcab73ab57568b6a6ed9434fb5
BLAKE2b-256 bd58fefeee83bf5fc6db1d1fa07a853b1d059f344e0b6ffe406c5c7a29a1dc44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b4ffec8ae00d8107cdda1f80a7d04cc55cc1e6f58ea3d2b571ac983c07491a2c
MD5 49061ddaef3e9c49f0ead6eacf7f5ca1
BLAKE2b-256 ffc8dc78f50c1d3e1012ae35edad4734039bbf082afda63d3312ea6fd26a10d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ce8ec8b9bb87c24acce947c9a03f6aa1fb0a371cd57b8fc365e174d78cb87181
MD5 888887166d7ef1cc078ffc9e39a25179
BLAKE2b-256 678c0040a6584372d4b0cd607d394e6fd7c83a6708941951d1d222b8811852bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4bcdc0ac2ecff2223e1c402e6758ab110d93e8cea2a24ecfbd54aa717606cfcb
MD5 fe7ecbe8a935817367b717c143b4c2a9
BLAKE2b-256 990518f823a57b9e0dede5699eb4ed86ad1d7fde5909c7e06e1696c62e6f8b68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c505475b23a7342d7bd17d3ff4bd60d20e894dc7b142ccc4bece249ca5daa983
MD5 a7992b5325abd5b0b9c2ad74d5717da9
BLAKE2b-256 c9fcca7e6bea158f5425c99dfd0dfd465cec6fe85369d74995adbe472e12a7f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a708a11829b43fafabc8710e0ee272767d461a8b4865924529d7629b67e49126
MD5 85cc175588477d8a16ebd0bd0939d17f
BLAKE2b-256 35643c008b41250adca390b70c93c59a5023311676f8e268a671a55e4f12adca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 906ef0aacd7947ce13579344ebaad7eb35fbe1cc8d7a9974dfe56e4523a414c1
MD5 eb94c0b6402519cac6df24afb6322321
BLAKE2b-256 b6bd3d462b92e65f75d009577f1d4ac6e857c8e64ca638eb084148aa840d9264

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 15ac0d26f58b047ff8c6917ab610c831e9430b47ff7e2410ee396095860d5c18
MD5 488efc5ad9695c792a1e53c5c52097e1
BLAKE2b-256 5e08dd65a9f620f2f2c5cf8fe060ad3f78864158fd129ab690b3b0524a740533

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d359ae6ca501fb74ed806edcbb41b905c94054908cb35b4dd3b248f74ed7fcd4
MD5 83b58a241eb2597bc980cb29fd003fa8
BLAKE2b-256 c44ccfe57587697cf834084f8a2c5597c0e5a7d7bd8f0ab7fd84f398ac1dd570

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a53593e1f85cd3c75cfb16702cc9afe1cc036f45c701ebfd6dd95bf529d67f46
MD5 7ee3da9aa8e291af203c907b9d85537f
BLAKE2b-256 373aab5b3a00009c49d943cf985341479d0177a8a8edd502238fa4bc481524e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 d435067bd5329220b6915e19183b0baebd5816e36ca0f43e4154bb1274d25fce
MD5 48d83eca948036a176a40317ae3b58bf
BLAKE2b-256 5f2f4d985e52cbeb3f6c23195e0a2d0df047304cfd39edd482e43038293f6da8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5a1d3adbebbd688f2606afbd1a39115c747a757601ac3de2f349c66d5f1073c7
MD5 76b84900da5ef62c517477f63a59e2ab
BLAKE2b-256 e1d0b910fcf8ffceb3612cf79de4191ec9c394c9b516f54188914832528bc985

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c7909e2827254217f2468a0c29a91bf23fb0a22e1d10b557dec2c30284c1f4e9
MD5 624912858e70d163dce50548780339e2
BLAKE2b-256 4c384b2094a0b7b56a7be194ffc057290aec3789005348432489bcbeb3e1756a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fea46803182b72d55af4c069f66c57b4570a04ccf8334cb9427a2fc13ecf38d4
MD5 6c87820f25a7fa095c8c38cc5798d1a3
BLAKE2b-256 1b38059e54ee0473b88801213df05bcb889c6d85869f3a6080b2e272888d4361

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1169731ba5e82e65a92aaa6576ee0c290cf57563d6b5a56931c69daabe3b46cd
MD5 e4021085deca8f5b83dd0f7adbce1892
BLAKE2b-256 690a7609e520abd2ed8b27bedbef7c60ec27530325499623aedc92fde8eab3bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3468f3a30c42f5b8f12a2a85db0c40f3bf428e2fae884c1587a82bb2a1b4c2fd
MD5 b09b90127c609631a74067f8952ec118
BLAKE2b-256 a2207c2a40f2f3eba842fa8f1ace187c5c81f5e9abcfe57fe795bb01f7dc00d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8f16ad09f629eebfc90e76ec9d5ab22ff33c9c8cb3f688dde056565816523203
MD5 cd6c25e827a634e41831ca2c2f9f2a33
BLAKE2b-256 5adf4dedc016d2700d13f8a557eaa9ef1d4fe1cebed83ce01a0078799c2d8c55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e95a36e2aeb94d2a80d1e9d58ded2053c80770ca50497587cd23ed72d1a5629
MD5 557f5e3153d6f9d95c854a0dbb32f45b
BLAKE2b-256 a7cde08bfddab7ce7d55af30424f0e846d06f9fb1f88180fd327530d1ccb9a76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 159e3ce3f7f83386ae9fa0258842fa2d6624b93f3e141900e6d9c39ac53cc53d
MD5 22e068864eec5e4c8fd5652d63d66297
BLAKE2b-256 6e0eef31a9c53f1df093648eb85a963e817ffba53dfe7c84e13c4459399f0b31

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