将类/实例属性传递给Python中的静态方法

时间:2018-03-09 11:49:09

标签: python class optimization static-methods

将instance / class(self.something)的属性传递给同一个类的静态方法是否有意义? 没有静态方法的示例:

from intel import i5
from kingston import ddr3
from windows import Prompt


class PC:

    def __init__(self, username, password, cpu, ram):
        self.username = username
        self.password = password
        self.cpu = cpu
        self.ram = ram

    def _log_in(self, login_prompt):
        login_prompt.enter(self.username, self.password)

    def start_up(self):
        # boot_up and do stuff...
        login_prompt = Prompt()
        self._log_in(login_prompt)
        # auto-run applications and do stuff...

静态方法示例:

from intel import i5
from kingston import ddr3
from windows import Prompt


class PC:

    def __init__(self, username, password, cpu, ram):
        self.username = username
        self.password = password
        self.cpu = cpu
        self.ram = ram

    @staticmethod
    def _log_in(login_prompt, username, password):
        login_prompt.enter(username, password)

    def start_up(self):
        # boot_up and do stuff...
        login_prompt = Prompt()
        self._log_in(login_prompt, self.username, self.password)
        # auto-run applications and do stuff...

在这两种情况下,使用情况都是一样的:

my_computer = PC('user', 'password', i5, ddr3)
my_computer.start_up()

1 个答案:

答案 0 :(得分:0)

此代码错误

@staticmethod
def _log_in(self, login_prompt, username, password):
    login_prompt.enter(username, password)

静态方法不会收到self,即实例。您没有在静态方法中获得对实例的隐式引用。您可以将静态方法视为普通函数,但可以从实例中调用。

如果您不打算公开_log_in,请不要提供参数,只在其中使用self