设置自定义对象属性

时间:2015-05-03 19:08:22

标签: python class python-3.x

我正在搞乱继承的类,并想知道是否可以使用方法设置自定义对象属性。 它可以这样工作:

gluPerspective(45f, (float) WIDTH / (float) HEIGHT, 0.1f, 100f);
  • 有没有办法做到这一点?
  • 您可以使用class MyClass(object): def __init__(self): super.__init__() def setCustAttr(self, name, value): #... g=MyClass() g.setCustAttr("var",5) g.var+=6 g.var="text" 吗?

2 个答案:

答案 0 :(得分:6)

这是O(n log p)函数的作用:

setattr

答案 1 :(得分:1)

传递给setCustAttr的参数正是您传递给setattr的参数。

def setCustAttr(self, name, value):
    setattr(self, name, value)

为什么你想要setattr的包装?您可以尝试执行一些验证:

def setCustAttr(self, name, value):
    if name not in ['bar', 'baz']:
        raise ValueError("Custom attribute must be 'bar' or 'baz'")
    if name == 'bar' and value < 0:
        raise ValueError("'bar' attribute must be non-negative")
    if name == 'baz' and value % 2:
        raise ValueError("'baz' attribute must be even")

    setattr(self, name, value)

但是,这并不妨碍您的班级用户忽略您的setCustAttr方法并直接指定该对象:

g = MyClass()
g.bar = -5  # Negative bar!
g.baz = 3   # Odd baz!
g.quux = 2  # Non-bar/baz attribute!

Python具有更强大的魔力,可以更好地控制如何在对象上设置属性(请参阅__slots____{get,set}attr____getattribute__,属性等),但通常情况下,它们不是'仅用于防止上述示例。 Python的方法是记录如何使用类的实例,并信任用户遵守您的指示。 (如果他们不这样做,警告经纪人。)

相关问题