Python Make方法可以从类或实例调用
我想创建一个从类或实例调用的方法。Python Make方法可以从类或实例调用,python,python-3.x,methods,Python,Python 3.x,Methods,我想创建一个从类或实例调用的方法。 例如: class-SomeClass: a=10 定义初始值(self,val): self.a=val def打印(自身): 打印(self.a) SomeClass(20)。打印a()#20 SomeClass.print_a()#错误! 在这里我想让print\u一个也可以被类调用。 如果我使用classmethod,结果是错误的 class-SomeClass: a=10 定义初始值(self,val): self.a=val @类方法 def打印
例如:
class-SomeClass:
a=10
定义初始值(self,val):
self.a=val
def打印(自身):
打印(self.a)
SomeClass(20)。打印a()#20
SomeClass.print_a()#错误!
在这里我想让print\u一个
也可以被类调用。如果我使用
classmethod
,结果是错误的
class-SomeClass:
a=10
定义初始值(self,val):
self.a=val
@类方法
def打印(cls):
印刷品(cls.a)
SomeClass(20)。打印a()#10(错!)
SomeClass.print_a()#10
我希望结果是这样的:
SomeClass(20)。打印a()#20
SomeClass.print_a()#10
如何实现这一点?
classmethod
只是一个描述符对象,您可以在中了解如何使用纯python实现它。以该实施为灵感:
from types import MethodType
class HybridMethod:
def __init__(self, f):
self.f = f
def __get__(self, obj, cls=None):
if obj is None:
return MethodType(self.f, cls)
else:
return MethodType(self.f, obj)
class SomeClass:
a = 10
def __init__(self, val):
self.a = val
@HybridMethod
def print_a(self):
print(self.a)
SomeClass(20).print_a()
SomeClass.print_a()
classmethod
只是一个描述符对象,您可以在中了解如何使用纯python实现它。以该实施为灵感:
from types import MethodType
class HybridMethod:
def __init__(self, f):
self.f = f
def __get__(self, obj, cls=None):
if obj is None:
return MethodType(self.f, cls)
else:
return MethodType(self.f, obj)
class SomeClass:
a = 10
def __init__(self, val):
self.a = val
@HybridMethod
def print_a(self):
print(self.a)
SomeClass(20).print_a()
SomeClass.print_a()
非常感谢!“我想我需要一些时间来弄清楚这段代码是如何工作的。”春夜路从一开始就读了这段代码。另外,更多的细节在非常感谢!“我想我需要一些时间来弄清楚这段代码是如何工作的。”春夜路从一开始就读了这段代码。此外,更多详细信息请参见