假设我有一个类Circle
,定义如下:
class Circle:
def __init__(self, r, _id):
self.r = r
self.id = _id
def area(self):
return math.pi * (self.r ** 2)
我想写一个函数比较两个圆并返回最小的一个的id
def compare_circles(circle_1: Circle, circle_2: Circle) -> str:
if circle_1.r < circle_2.r:
return circle_1.id
else:
return circle_2.id
我想将此方法作为静态方法放置在类上。(这是个坏主意吗?)
class Circle:
def __init__(self, r, _id):
self.r = r
self.id = _id
def area(self):
return math.pi * (self.r ** 2)
@staticmethod
def compare_circles(circle_1: Circle, circle_2: Circle) -> str:
if circle_1.r < circle_2.r:
return circle_1.id
else:
return circle_2.id
但是,这不起作用,因为圆
对象不可用于类型提示。我必须删除方法中的类型提示。使用classmethod
也不起作用,因为cls
参数对其他方法参数不可用。
在这种情况下,一个可能的解决方法是在定义类后对方法进行猴子补丁:
class Circle:
def __init__(self, r, _id):
self.r = r
self.id = _id
def area(self):
return math.pi * (self.r ** 2)
def compare_circles(circle_1: Circle, circle_2: Circle) -> str:
if circle_1.r < circle_2.r:
return circle_1.id
else:
return circle_2.id
Circle.compare_circles = staticmethod(compare_circles)
del compare_circles
通常的方法是提供类型名为的字符串:
class Circle:
def __init__(self, r, _id):
self.r = r
self.id = _id
def area(self):
return math.pi * (self.r ** 2)
@staticmethod
def compare_circles(circle_1: 'Circle', circle_2: 'Circle') -> str:
if circle_1.r < circle_2.r:
return circle_1.id
else:
return circle_2.id
另一方面,您也可以考虑将<代码> CopaReSwiteCube <代码>转换成一种方法:
def compare(self, other: 'Circle') -> str:
if self.r < other.r:
return self.id
else:
return other.id
我正在尝试创建静态类ActivitySetup,它用于为我的活动设置语言、主题等。我在设置主题方面有问题。现在我有以下代码: 但它会崩溃。我知道我应该使用而不是,但是我怎么做呢?如何将超类实例作为参数传递给静态方法?
问题内容: 如果我有以下python代码: 它抱怨 如何在方法中访问类/静态变量? 问题答案: 代替使用或。分配给将创建一个静态变量,分配给将创建一个实例变量。
在 Python 中,可以定义三种方法——实例方法、类方法和静态方法。 实例方法: 是我们在创建类时创建的普通方法。这些方法与对象有关。这些方法的语法是 def do_something(self) ,其中 self 指的是实例对象。 类方法: 与实例对象略有不同。它们与类绑定,而不是与类的对象绑定。这些用于执行类任务并可以更改类的状态。我们用@classmethod装饰器创建一个类方
问题内容: 如果我有以下python代码: 它抱怨 如何bar在方法中访问类/静态变量? 问题答案: 代替bar使用或。分配给将创建一个静态变量,分配给将创建一个实例变量。
本文向大家介绍python的类方法和静态方法,包括了python的类方法和静态方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python的类方法和静态方法。分享给大家供大家参考。具体分析如下: python没有和C++中static关键字,它的静态方法是怎样的呢?还有其它语言中少有的类方法又是神马? python中实现静态方法和类方法都是依赖于python的修饰器来实现的。 大家注意
问题内容: Python中是否可以有无需初始化类即可调用的静态方法,例如: 问题答案: 是的,使用装饰器 请注意,某些代码可能使用旧的方法来定义静态方法,而将其staticmethod用作函数而不是装饰器。仅当你必须支持Python的旧版本(2.2和2.3)时,才应使用此选项。 这与第一个示例完全相同(使用),只是不使用漂亮的装饰器语法 最后,要谨慎使用!在极少数情况下,Python中需要使用静态