大家在进行Python程序编写的的时候经常会遇到这个问题:
在波浪线的地方提示:
那么这是什么原因呢?这是因为我们在类中所声明的方法没有使用类中的属性。
一、首先我们介绍一下python中的类
我们知道,在类的定义中,包含两部分:属性和方法(或功能)。
如图所示,在类的定义中,定义了两个属性:first_attribute 和 second_attribute;定义了一个方法:name_method。包含了这两个部分,就可以作为一个类使用。接下来在主函数里面构建一个
对象:
A_object = NameOfClass()
这时,这个对象A_object就拥有了这个类的属性和方法。
举个例子:把类看作“人”,人的属性有:身高,体重,人的方法(功能)有跑步,跳高。构建一个对象:张三,则张三也就有了身高体重的属性和跑步,跳高的功能。
代码中
A_object.first_attribute
表示A_object调用了第一个属性,调用方法就是:'点',此时就将对象的属性调用了
二、再介绍method '***' may be static的原因及解决方法一
当方法中没有使用类的属性,这时方法定义时就会出现如上情况
比如上例,跑步依赖于体重,这样在编写方法(功能)的时候,就需要在跑步(方法)将体重(属性)加进去,如图,在构建name_method的方法函数中,用到了属性中的first_attribute
但是当没有使用属性的时候,就是静态的,即认为跑步和体重无关。
上述也是去掉波浪线的方法一
三、方法二
当我的方法中是在不需要使用属性是,这时怎么办呢,也有办法,就是提前申明这个方法是静态的
具体步骤,将def name_method(self)改为
@staticmethod
def name_method():
四、示例代码
代码一、定义类的框架
# 类的定义的框架
class NameOfClass:
def __init__(self):
self.first_attribute = 1 # 第一个属性
self.second_attribute = 2 # 第二个属性
def name_method(self, *args):
print(self.first_attribute)
print('这是第一个方法')
if __name__ == "__main__":
A_object = NameOfClass() # 构建一个对象
print(A_object.first_attribute)
代码二、申明
class NameOfClass:
def __init__(self):
self.first_attribute = 1 # 第一个属性
self.second_attribute = 2 # 第二个属性
@staticmethod
def name_method():
print('这是第一个方法')
if __name__ == "__main__":
A_object = NameOfClass() # 构建一个对象
print(A_object.first_attribute)
代码三、具体例子
# 具体示例
class Person:
def __init__(self, height, weight):
self.height = height # 第一个属性
self.weight = weight # 第二个属性
def run(self, age):
velocity = 100 + 1/self.weight + 1/age # 100m/s是基准速度,体重越大,速度越慢
return velocity
if __name__ == "__main__":
zhangsan = Person(170, 75) # 构建一个对象
v_of_zhangsan = zhangsan.run(25)
print(v_of_zhangsan)
输出:
100.05333333333334
五、总结
1、类的定义:属性&方法
2、解决方法:(1)提前用@staticmethod申明
(2)在方法中使用属性