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

标签 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'

最佳答案

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/

相关文章:

python - 更改事件键上的光标形状

python - 在 Python 的字典中使用特定值初始化未知数量的键

python:什么时候在类方法上使用静态方法?

ios - 无法识别完成 block 返回类型

python - 由于额外的键,to_datetime 组装错误

python - 为什么这本字典会变成一个元组?

python - 无法安装 Statsmodels...python

python - 收集类变量中的所有实例总是不好的吗?

python - 如何使用 python-decorator 包来装饰类方法?

python - 如何使用类方法创建自定义类实例?