我可以使用类方法在Python中设置类的属性吗?

时间:2015-02-15 19:47:48

标签: python class-method

我有一个具有某些属性的课程。

我想定义一个方法,根据已经设置的属性设置其他属性。像这样:

class Test:
    def __init__(self, name):
        self.name = name
        self.list = []
        max = None

    def get_max(self)
        self.max = max(list)

这不起作用。我有一种感觉,我做的事情非常错,但我无法解决问题。请有人让我摆脱痛苦。

更新的代码给了我一个属性错误:

class Test:
    def __init__(self, name):
        self.name = name
        self.lst = []
        self.mx = None

    def get_max(self)
        self.mx = max(self.lst)

当我调用该方法时,不会返回任何异常,但不会更新self.mx属性。

>>>t = Test('testname')
>>>t.lst = [1,2,3]
>>>t.get_max
>>>t.name
'testname'
>>>t.lst
[1,2,3]
>>>t.mx
AttributeError: Test instance has no attribute 'mx'

1 个答案:

答案 0 :(得分:3)

引用属性self.listlist指的是python内置列表。

您需要执行以下操作:

class Test:
    def __init__(self, name,lst):
        self.name = name
        self.lst = lst
        self.mx = None # use self to create an attribute

    def get_max(self):
        self.mx = max(self.lst)

您也可以随时在列表中调用max,只要您想获得max,就不需要创建属性和方法来返回或获取列表的最大值。< / p>

如果你真的想使用一种方法获得最大值,你应该只返回方法中列表的最大值:

class Test:
    def __init__(self, name, lst):
        self.name = name
        self.lst = lst

    def get_max(self):
        return max(self.lst)

t = Test("foo", [1,2,3,4])
print(t.get_max())

4

你班级的设计实际上取决于你究竟想做什么,但你不是在python中得到getter或setter。

如果您想根据列表中的max元素执行某些操作,则不需要属性:

class Test:
    def __init__(self, name,lst):
        self.name = name
        self.lst = lst 

    def some_meth(self):
        if max(self.lst) > 2:
            # do something