Python静态方法,为什么?

2024-10-01 17:29:19 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
What is the difference between @staticmethod and @classmethod in Python?

关于类中的staticmethods,我有一些问题。我先举个例子。在

示例一:

class Static:
    def __init__(self, first, last):
        self.first = first
        self.last = last
        self.age = randint(0, 50)
    def printName(self):
        return self.first + self.last
    @staticmethod
    def printInfo():
        return "Hello %s, your age is %s" % (self.first + self.last, self.age)

x = Static("Ephexeve", "M").printInfo()

输出:

^{pr2}$

例二:

class Static:
    def __init__(self, first, last):
        self.first = first
        self.last = last
        self.age = randint(0, 50)
    def printName(self):
        return self.first + self.last
    @staticmethod
    def printInfo(first, last, age = randint(0, 50)):
        print "Hello %s, your age is %s" % (first + last, age)
        return

x = Static("Ephexeve", "M")
x.printInfo("Ephexeve", " M") # Looks the same, but the function is different.

输出

Hello Ephexeve M, your age is 18

我知道我不能打电话给任何人自我属性在staticmethods中,我只是不太确定何时以及为什么要使用它。在我看来,如果您创建一个具有几个属性的类,也许您希望以后使用它们,而不是拥有一个所有属性都不可调用的staticmethod。 有人能解释一下吗?Python是我的第一种编程语言,所以如果在Java中也是这样,我不知道。在


Tags: theselfhelloageyourreturnisdef
1条回答
网友
1楼 · 发布于 2024-10-01 17:29:19

你想用它来达到什么目的?如果你不知道它的作用是什么,你怎么能指望它解决你的问题呢?在

或者你只是想看看staticmethod做什么?在这种情况下,告诉{a1}它做了什么,而不是随机地应用它并试图从行为中猜测它做了什么,这可能会更有效率。在

在任何情况下,将@staticmethod应用于类中的函数定义会生成一个“静态方法”不幸的是,“Static”是编程中最令人困惑的重载术语之一;这里它意味着方法不依赖或改变对象的状态。如果我在一个类Bar中定义了一个静态方法foo,那么调用bar.foo(...)(其中{}是类{}的某个实例)将执行完全相同的操作,而不管{}的属性包含什么。实际上,当我甚至没有实例时,我可以直接从类中调用它Bar.foo(...)!在

这是通过不将实例传递到静态方法来实现的,因此静态方法没有self参数。在

静态方法很少有必要,但偶尔也很方便。它们实际上与在类外部定义的简单函数相同,但将它们放在类中会将它们标记为与类“关联”。您通常会使用它们来计算或执行与类密切相关的事情,但实际上并不是对某个特定对象的操作。在

相关问题 更多 >

    热门问题