gpt4 book ai didi

python - 如何限制对未定义类/实例变量的访问?

转载 作者:太空宇宙 更新时间:2023-11-04 04:10:26 29 4
gpt4 key购买 nike

Python 允许访问未定义的类/实例变量

我定义了一个简单/空的 python 类,如下所示。现在,如果我使用实例变量或类名为 undefined variable 设置值,Python 允许我自由设置 undefined variable 的值,还允许我像访问实例或类变量一样访问它而不会引发任何错误。所以简而言之,我可以毫无问题地设置未定义的实例和类变量。

  1. 我们如何限制用户在 Python 中设置未定义的实例和类变量。

  2. 这里,Python如何处理这些 undefined variable (undefined_variable_1undefined_variable_2)?这些是否被视为实例变量或类变量或其他东西?

class Test:

pass

### #Now instantiate the class and try setting & it accessing undefined variables
t1 = Test()

t1.undefined_variable_1 = "Undefined class/instance variable being set through instance variable (t1)"

### #Access the undefined variable through instance variable
print(t1.undefined_variable_1)

Test.undefined_variable_2 = "Undefined class/instance variable being set through Class name (Test)"

### #Access the undefined variable through Class name
print(Test.undefined_variable_2)

我们如何限制用户设置/访问未定义的实例/实例变量?

最佳答案

为此,您可以设置__slots__,它限制了一个类的实例可以具有的属性:

class Restricted:

__slots__ = ('a', 'b')

r = Restricted()
r.a = 1 # okay
r.b = 2 # okay
r.c = 3 # error

如果您希望类对象具有相同的功能,您可以创建自定义元类并覆盖__setattr__:

class RestrictedMeta(type):

def __setattr__(self, attr, value):
if attr in ('a', 'b'):
super().__setattr__(attr, value)

else:
raise TypeError(f"Can't assign to attribute '{attr}' of class 'Restricted'")

class Restricted(metaclass=RestrictedMeta):
pass

Restricted.a = 1 # okay
Restricted.b = 2 # okay
Restricted.c = 3 # error

关于python - 如何限制对未定义类/实例变量的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369881/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com