我有一个具有某些属性的类。
我想定义一个方法,根据已经设置的属性设置其他属性。像这样:
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'
最佳答案
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,您不需要创建属性和方法来返回或获取列表的最大值。
如果你真的想使用一个方法来获取最大值,你应该简单地在方法中返回列表的最大值:
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。
如果您想根据列表中的最大元素执行某些操作,则不需要属性:
class Test:
def __init__(self, name,lst):
self.name = name
self.lst = lst
def some_meth(self):
if max(self.lst) > 2:
# do something
关于python - 我可以使用类方法在 Python 中设置类的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28530368/