我有一个具有某些属性的课程。
我想定义一个方法,根据已经设置的属性设置其他属性。像这样:
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'
答案 0 :(得分:3)
引用属性self.list
,list
指的是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