Skip to main content
 首页 » 编程设计

python之如何从 python 中的 @staticmethod 函数中找出我被调用的类

2025年05月04日13虾米姐

当一个静态方法被调用时,有没有办法让它知道它是从哪个子类调用的?

(我知道这是非常不面向对象的,并且在编写良好的程序中可能永远不会有用,但我想知道语言是否提供它)

例如:

class A(object): 
  @staticmethod 
  def foo(): 
    print 'bar' 
    # *** I would like to print either 'A' or 'B' here 
 
class B(A): 
  pass 
 
A.foo() 
B.foo() 

请您参考如下方法:

为此,您必须使用 @classmethod 而不是 @staticmethod。使用类方法,您可以获得对作为第一个参数传入的类的引用:

class A(object): 
  @classmethod 
  def foo(cls): 
    print cls.__name__ 
    # *** I would like to print either 'A' or 'B' here 
 
class B(A): 
  pass 
 
A.foo() 
B.foo() 

输出:http://codepad.org/bW3E51r9

A
B