Skip to main content

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.
  • Don't use a decorator which will return the _PrivateWrap in PrivateWrapProxy which will raise TypeError.
  • 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".

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-2.0.0.tar.gz (32.8 kB view details)

Uploaded Source

Built Distributions

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

private_attribute_cpp-2.0.0-cp314-cp314t-win_amd64.whl (292.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-2.0.0-cp314-cp314t-win32.whl (268.6 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl (86.8 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.0-cp314-cp314-win_amd64.whl (291.3 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-2.0.0-cp314-cp314-win32.whl (267.7 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp314-cp314-macosx_11_0_arm64.whl (85.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-2.0.0-cp313-cp313t-win_amd64.whl (96.8 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-2.0.0-cp313-cp313t-win32.whl (71.6 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp313-cp313t-macosx_11_0_arm64.whl (86.7 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.0-cp313-cp313-win_amd64.whl (282.1 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-2.0.0-cp313-cp313-win32.whl (260.3 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp313-cp313-macosx_11_0_arm64.whl (85.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-2.0.0-cp312-cp312-win_amd64.whl (282.1 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-2.0.0-cp312-cp312-win32.whl (260.4 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp312-cp312-macosx_11_0_arm64.whl (85.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-2.0.0-cp311-cp311-win_amd64.whl (281.9 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-2.0.0-cp311-cp311-win32.whl (260.0 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp311-cp311-macosx_11_0_arm64.whl (84.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-2.0.0-cp310-cp310-win_amd64.whl (281.9 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-2.0.0-cp310-cp310-win32.whl (260.0 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-2.0.0-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-2.0.0-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-2.0.0-cp310-cp310-macosx_11_0_arm64.whl (84.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-2.0.0.tar.gz
Algorithm Hash digest
SHA256 a9e4ec1178b49f225598228140030c59d45571a2ca398b94f8ff4f0d9c528b66
MD5 bf15c45f8eabe86186e700d5370765ca
BLAKE2b-256 ad139bb96ff9c93807e620b73c53d95478854975b397c5e4cb6c7d9ceb1a241b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 94f3061ecbb941c10489a60b47e4860efa384ecd0242a854c6d8a4d568219d5b
MD5 241f54104a3652b43905bb42e6d180e1
BLAKE2b-256 c32e1fd72166204b04f1597ae31bda954736a8f22036f3911cfd228f38030c39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 4bba4b15778b81544aaf3e43f61aa9cf2824243e64a9c7782302ed8f7833e639
MD5 3a7f8ace3676eafb717d7a2e81c6e89c
BLAKE2b-256 7a4cc4052fdf4b443c16efc807dcd3940c3fd77c4ba110d58cb8ccb943f33041

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2dfa152c97c26130dd2b7d027a47edb5da99715b8b34835c7657dc21642e9563
MD5 faa78a05a5d7775582f81e45e023e577
BLAKE2b-256 d8778b81b69eae81d9f9910db684a06e0d3ec35a0737b70cf9187a8241dab6ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b6380b2dd5ab316f07efc0a936107312fe82a70ca68430c2935c268b33490183
MD5 0d3ba192137e4b922d4c6d2f27678fd3
BLAKE2b-256 33841cbd695c7354b398ff885afd93061e39f9c5d3ee88d7835a39c191a7652e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a3fce90fc23250f7b574efb0d82e786fabc89743235bdc45cdfd93147c41bf21
MD5 d6a00e12b1dc1fadfb0a838f4560d832
BLAKE2b-256 7b9abe0561a52658c4ab517d6b7dca3256b9460516a7d152e6710a091acd3d46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7117f68ab5ada3890077f1527524548cc78247e9647d0f2555a9f56f1dcfb32e
MD5 fcbdface9226eb8e8549d436f9ecc7e7
BLAKE2b-256 83ec9f797a6fcecb039251beb9c4f50ded21a4204e329159a5289bbd5b02477d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 f4602945202f1c27659480f717f3a48ff6adb615aa4553bbffebd87d4d368dcd
MD5 0245b015471772547043f8337fca0f47
BLAKE2b-256 7797876d47b8755af0865fa0b859ca7be005baf6bd7348250f56cb5df3e8f2b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 daa5ea8000c467cd4b2857ffb2841ed7360e24ce7a26d4c17ea423eba6cd7c5c
MD5 95e8d89ab03edbc81549fe641e8be59d
BLAKE2b-256 43da02ba71b9e79cceb9318caf7af4877b8fa556008ac64887f7248fab8ca68b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 232b0b4a3d54c72d7910eb45bb4f45ec61a9db79c2c932a715b157e03e5f0283
MD5 4fccd5fcfee4c70cf3ae5e9d8d23de7d
BLAKE2b-256 fff37ca2a06dbc2a93e071f2e35fb47a9c36d3c1c2325fe0d5ca3e9ea671497f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4746e130cf69f05682c917b065f247e845ea90e541e5db22131b9402207a0453
MD5 4b2ddc8ef4a504b2b82cd714ef6176a2
BLAKE2b-256 d9fd8e2b31075074586b20be0dfd480d8db65463b907302a644f213c737d0e8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 68edbd10167c346dcd695f851b3c0a51c8149ded54e53dd620ac81a6ae714ecb
MD5 fa153d67a973a782ca1da7991a8db9c7
BLAKE2b-256 156fa8cb1211825a878b3d7e3223ace75b4ab444e090ec966765fb902aa10ca9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 e8df215cda235722149a386b67911b30034a0e734a9037a8bae5c61225207f83
MD5 5126867535aaa54c038186770911002b
BLAKE2b-256 7b4ad9bbf5cc13117f8033dd3c4d63da5f7f87aca5c78e845e6c1724d37cbafb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f2d29ab6672dc41d03c0499fc9bde7270f2bd0e1d0d68e59aab7a23249b4b924
MD5 6217d59c9c11fd376498f0b019d5ce03
BLAKE2b-256 8f2e2a958769565b621430c9d35bab0e87157abb5c896e59b2ec6b6eb034c869

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3bf8afcc7c132fdfa9c814d33a5474fd522731e33f494420ffcc4ffdd6589b3e
MD5 f1d5deb9b84e594327bb983685aa2419
BLAKE2b-256 b1d2c14e765b3dcb459cd0973d538fbf4cf4966cce642053a04731da10dc0a63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3a66ecf9f03f3f7a652508243c2e3e8daffadd31a994af29d05befd275d41788
MD5 ca60f0e9e370f2a273b11832cb79d0b0
BLAKE2b-256 c8a45d8bce24a28ca964a0f55a885736f2c66115ac8d84f6d44564ac24aa783b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8a317e96906a0500a8433031350c402a58ad8a2ef9e47203e361ef4f6cb2f4e5
MD5 7cb5f4acdfeac763561975369328b34f
BLAKE2b-256 53330dbd3d2bd1e7b8353e72e00632ec6bec2225c0d05ec43819e8dca9d2dd70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 5cb75f4a7096d3ca21a7f49bdbd8a2a249c7481bf07bb02fa0a9c043caca44b1
MD5 88112109d8ed9fc2988de0b255162ba3
BLAKE2b-256 11ade16d92bc00e16918522c1b8f82aa90102d497a11042314725952c5ccdf2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 577852535591c3eb0d70860d647ec66641af29c6b49ba2d2b2ae9b7ac00c73fa
MD5 a26b57ee2cd905431de95f47bbc18be4
BLAKE2b-256 0b5c669df5d6cb868466d80188dfab507a7678646882d19dbbd74fb08f273ac0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 79cb517fc2a374ef6373cec25e49f4da64618d8b947cb640dfdac3f99468cd74
MD5 f5b75bbb4bc3e668de0cf4b9b0a9cdd0
BLAKE2b-256 cba00cdc522749169f9f4327c79df219bd7829e8cce052db2e14273e5a156de3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb110cbd857993ff19cf24e2de070ffb69eefc8e873da6daa50d4fa6c099dfc4
MD5 3ff9cf8181c2b5364b0bc2452737f869
BLAKE2b-256 8b5b62e0470a242cd8026969a570afbc4743b2f9fb5704f648cbb61f0ed1b5a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 593cba611c532842afad67e6b01914fad093bf126be3e24ffad8f3ef679f726a
MD5 caa84f795382337b73f2da1c39c3e808
BLAKE2b-256 ff5c2d679114f868b1ba883d56aba9df34a5304526bc15f80ce8352913ce7c7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 23aaddcb42229be7c667e09fd79264510323a9f08996d1c3d8dc41d2e86589e2
MD5 787f458d67e6add09828082cea543b5b
BLAKE2b-256 63b99a6f6d8fdd29dcae96fe51b73328202a39d2e5aee1f2d4cb2df14a4ea08b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1078ee71e21776be93e3db37df0fd4a4a74071bba8ca6613de106e2ccd830123
MD5 d3143767b39d729c21a117c6799deb07
BLAKE2b-256 2e2d54a0a7452218967f79493661e38866d49ba654668aa66d0ca21468151b6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea90c93fa45ca2e690da2825c2e61083183e27592fc25cc9eb51209299843b34
MD5 467466256463172712b23efb2e79cfc5
BLAKE2b-256 f8e1f0adb96fb22be0fcfd4996862f11dbf457bfee79805c8fa03322845d85ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f623590f732c18af0ad990e32a8874972dea3598e414f8be9da0221af7994a6c
MD5 8d7014fe5290c4e5e5a5dc6f930ce9e9
BLAKE2b-256 7cb27bdc06b93f20265b85ad6d14b8fe03da1558d2fcae2298ae6dc867fce311

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7f9e5f85788502e7906f2b9138ea083536d519529f6ec8bb385bd6369d8d39dc
MD5 164eb31e60cb44fcd2e127041f9be903
BLAKE2b-256 ecb7ce085fc042f67c6ee50d1afdfac33b6bc3eece0de7f9988f1cbb57c32c30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 dd45686bf25eac14f9a88b11b9ee85345990169c668b3bc56e3b96a913e4ee81
MD5 96a28b54bcb5391c6dc18152161c3eef
BLAKE2b-256 2481c56afe1999c31b4cdde68eb977875b88a6081591aca28ea97aa04d0ea007

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 69cbbee0c5bf479d9e7ed5205efeeefeacce8841a57fdab0885a3c02f1230377
MD5 a12c1539c62de51bb2e3f35c2cda2843
BLAKE2b-256 19063f761fe28a1c70e4475e5410764742d56cf52f0a372816b3a6933d88997a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd5f5aaa5052cab4e24424224a78b2b58fde7d5fdb7c604e18d74a84ee8fc365
MD5 1561024723d9910fdc18c952964c7e49
BLAKE2b-256 d93343b99fbfa2c8dd3279b0f372d1728c6f9dc805bbf35afc299148a0a6d5ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb5ed5b3a5e6a667c71cb473712fc551602e72c339e2d31ed81de19f5bfaf0ff
MD5 12e2f38b735a2d0c20474b8e34d3bdb0
BLAKE2b-256 59b9d96632485d476209440f0d44b460f869c1f03a6cfde9a00ff40220656382

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 391662cb40b5dd7395274b67ce1c0219416e55aff982211b067cbb4195537ff5
MD5 55594019e3edae18ddb77478e9af3a3b
BLAKE2b-256 2f2ea859cba02764d659dd7a68c3889b145e1ad8c26a0c360db227b8812f0364

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 1db7fe2610c94954baa08995e1f27a22e151c30b91f2b73dd97c9eaf99a9870d
MD5 492075bb4e6d06fb14299348b674fff3
BLAKE2b-256 3896a9fe29b3637ce1b3aaa8ef3d7144363c36db08e0c5bd3dec1689a009d149

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c721b61cfdfc662c4c7b0f6db0e5a61698f80f7c8636b7cfa2d9b586d22c7b4c
MD5 bdeeb8548aaa2dbcdc447ba96fb84037
BLAKE2b-256 ff9018c20cc5ac6bfaf132fccedfe688fd151d5f272c65ffdb7468a02911ed61

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8d28edf328afb140e2fa436435b5502ef5b7a31cad3ce8bcb7f05e7b288dddb2
MD5 3c4e8e5c3b355c685351784e5336afbc
BLAKE2b-256 0e0e9ca81bdf1b4a00c47863512316f3b7548db0881728bee2fd953c608956d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bd8963960152b215d4bd1fa226ef1448cba6d5002382198c10f37517580d0ade
MD5 99a801a3793aab9b4f677caf68446fd4
BLAKE2b-256 b12fce99c3b72a151f1ebeeded6824d508ed18f71c39ab37e7daac0db4a632e0

See more details on using hashes here.

Release history Release notifications | RSS feed

2.1.12

36 files

2.1.11

36 files

2.1.10

36 files

2.1.9

36 files

2.1.8

36 files

2.1.7

36 files

2.1.6

36 files

2.1.5

36 files

2.1.4

36 files

2.1.3

36 files

2.1.2

36 files

2.1.1

36 files

2.1.0

36 files

2.0.6

36 files

2.0.5

36 files

2.0.4

36 files

2.0.3

36 files

2.0.2

36 files

2.0.1

36 files

This release

2.0.0 This release

36 files

1.4.11

36 files

1.4.10

36 files

1.4.9

36 files

1.4.8

36 files

1.4.7

36 files

1.4.6

36 files

1.4.5

36 files

1.4.4

36 files

1.4.3

36 files

1.4.2

36 files

1.4.1

36 files

1.4.0

36 files

1.3.10

36 files

1.3.9

36 files

1.3.8

36 files

1.3.7

36 files

1.3.6

36 files

1.3.5

36 files

1.3.4

36 files

1.3.3

36 files

1.3.2

36 files

1.3.1

36 files

1.3.0

36 files

1.2.10

36 files

1.2.9

36 files

1.2.8

36 files

1.2.7

36 files

1.2.6

36 files

1.2.5

36 files

1.2.4

36 files

1.2.3

36 files

1.2.2

36 files

1.2.1

36 files

1.2.0

36 files

1.1.0

36 files

1.0.12

36 files

1.0.11.1

36 files

1.0.11

36 files

1.0.10

36 files

1.0.9

36 files

1.0.8

36 files

1.0.7.1

36 files

1.0.7

36 files

1.0.6

36 files

1.0.5

36 files

1.0.4

36 files

1.0.3

36 files

1.0.2

36 files

1.0.1

26 files

1.0.0

26 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page