标签:实例变量 情况 sel python str 总结 pytho docstring 改变
1 class ClassName(object):
2 """docstring for ClassName"""
3 def __init__(self, arg):
4 self.arg = arg
5
6 @staticmethod
7 def foo():
8 print(‘**************‘)
9
10 a = ClassName(8)
11 a.foo()
这里面的foo方法就被装饰为了一个静态方法,他不能访问类变量和实例变量,可以调用。
在创建实例时,不会自动把实例本身当做参数传给self,因此在方法中不必写参数self,如果写上了self,由于没有自动把实例传给它,那么会报错说这里应有一个参数但是没有传入。这就是所说的,静态方法不能访问实例变量和类变量,如果想不报错,要么老老实实的不要传self参数,就做一个独立方法,这时,这个静态方法和类也就没什么太大的联系的,只不过是相当于处于这个命名空间内。还有一个方法就是,他没有自动把实例对象传给self参数,那么我们可以人为的把这个实例传进去。
上面的代码就是第一种情况,既然不能访问实例变量类变量,就不传参数,不访问,下面是人为传入一个对象。
1 class ClassName(object):
2 """docstring for ClassName"""
3 def __init__(self, arg):
4 self.arg = arg
5
6 @staticmethod
7 def foo(self):
8 print(‘**************‘,self.arg)
9
10 a = ClassName(8)
11 a.foo(a) # 调用这个静态方法时,由于里面有self参数,那么就把上面创建好的对象传给self
12
13 ClassName.foo(a) # 这句代码表示,静态方法可以直接通过类名来调用,而普通方法不可以
1 class ClassName(object):
2 """docstring for ClassName"""
3
4 name = ‘pig‘ # 这是一个类属性
5
6 def __init__(self, arg): # init初始化的是实例属性和实例方法,这里只写了一个属性
7 self.arg = arg
8
9 @classmethod
10 def foo(cls): #类方法参数默认写为cls
11 print(‘**************‘,cls.name)
12
13 a = ClassName(8)
14 a.name = ‘cat‘ # 这里我通过一个实例对象将name改变了,后面输出可以看到,foo方法并没有改变,印证了类方法无法访问实例变量
15 a.foo()
16
17 ClassName.foo() # 同样,类方法也可以直接通过类名来调用
python--staticmethod(静态方法)和classmethod(类方法)
标签:实例变量 情况 sel python str 总结 pytho docstring 改变
原文地址:https://www.cnblogs.com/yudanqu/p/9248061.html