【发布时间】:2021-06-20 10:49:19
【问题描述】:
问题:我正在创建一个具有属性的类。其中一些应该只是可读的,而有些应该在尝试打印出来时完全无法访问。我正在尝试通过__setattribute__ 和__getattribute__ 函数来实现它(我只是想不出更好的方法来做到这一点,如果您对如何改进它有任何建议,我将不胜感激)。问题是,虽然__getattribute__ 函数工作得非常好并引发了所需的异常,但__setattribute__ 却没有。程序只是通过它。
代码:
class Fruit:
def __setattribute__(self, name, value):
if name in ('exp_date'):
raise AttributeError('Unable to edit')
return __setattribute__(self, name, value)
def __getattribute__(self, name):
if name in ('subtype'):
raise AttributeError('Unable to view this object')
return __getattribute__(self, name)
def __init__(self, sub:str = None, col:str = None, expd:int = None, pkp:int = None, amount:int = None):
self.color, self.price_per_kilo = col, pkp
self.amount = amount
self.exp_date = expd
self.subtype = sub
def estimaterevenue(self):
return self.price_per_kilo * self.amount
测试:
fruit= Fruit()
fruit.exp_date = 123 # __set__ is being passed for some reason
print(fruit.subtype) # AttributeError: Unable to view this object
【问题讨论】:
-
fruit.exp_date = 123会调用__setattribute__而不是__set__ -
@rdas 抱歉,版本错误,我已对帖子进行了编辑
-
你的答案不是在这里吗? stackoverflow.com/questions/7042152/…
-
('exp_date')不是一个元组,顺便说一句。它只是一个字符串。