【问题标题】:Class Function and Static Method at the Same Time? (Python)类函数和静态方法同时使用? (Python)
【发布时间】:2015-03-29 20:32:35
【问题描述】:

是否有可能有一个函数不仅表现得像 @staticmethod 包装的函数,而且像任何其他类函数一样,如果通过实例调用函数,则可以传递来自实例的数据?

示例:

class Amazing(object):
    @static_and_class
    def func(x):
        return type(x)

apple = Amazing()

>>> print(apple.func())
>>> <class 'Amazing'>
>>> print(Amazing.func(2))
>>> <class 'int'>

这是系统的一个基本示例。基本上,我想要的是一种尽可能传递实例数据等信息的方法,但如果数据不存在,该函数将采用必要的变量来执行其程序。

感谢任何可以解决这个问题的人!

【问题讨论】:

  • 这个没有内置函数,但是你可以很容易地写出这样的装饰器。

标签: python function class static-methods instances


【解决方案1】:

任何类的任何方法都可以通过类名来调用。实例将自动将自身作为其任何方法的第一个参数传递。所以,如果你有类似的东西

class Bar:
    def bar(self):
        return type(self)

你可以的

thing = Bar()
print(thing.bar())
print(Bar.bar(2))

你会得到

<class '__main__.Bar'>
<class 'int'>

没有问题。当然,这是不受欢迎的。在为实例编写方法时,应将方法编写为 self 被假定为为其编写的类的实例。

【讨论】:

  • 好吧,这仅适用于 Python 3,他们删除了未绑定方法的概念。
  • 但我的代码有 self.foo 这样的部分,其中 self 参数不适用于非实例
  • 如果你愿意,你可以使用类型检查来解决这个问题;根据参数是否是类的实例来拆分行为。
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
相关资源
最近更新 更多