我是靠谱客的博主 无语滑板,这篇文章主要介绍实例属性_方法 类属性_方法 静态方法实例属性/方法 类属性/方法 静态方法,现在分享给大家,希望可以做个参考。

实例属性/方法 类属性/方法 静态方法

标签: python


实例属性和方法

在python中你通过类名创建的一个对象也叫作一个实例,比如:

复制代码
1
2
3
4
class A(object): pass a = A()

在这个里面a就是一个实例,而实例的属性一般在__init__方法里面创建。比如:

复制代码
1
2
3
4
5
6
7
class A(object): def __init__(self): self.name = "xx" def f1(self): print("f1") a = A()

其中name就是一个实例属性,而self代表具体实例,而f1就是实例方法,对于实例属性和实例方法都是实例可以访问和调用的。

类属性和类方法

这个地方要和以前的语言比如Java做区别,因为在python中对于类属性的定义很像Java中的成员变量,但是二者完全不一样。在python中直接在类里面定义的属性都是类属性,比如:

复制代码
1
2
3
class A(object): n = 0

其中n就是一个类属性,类属性在使用的时候可以直接类名.属性使用,对于上面例子可以直接A.n进行访问。除此之外类属性也可以通过实例对象来访问,比如a.n,但是不推荐。

类方法也是一个针对类的方法,你可以通过如下方法定义:

复制代码
1
2
3
4
5
6
class A(object): @classmethod def ff(cls): print("") n = 0

在这个里面ff就是一个类方法,@classmethod告诉编译器下面的方法是一个类方法,而cls的作用和self类似,只是cls代表类,而self代表一个实例,通过cls可以访问类中的其他属性和方法。对类方法的使用和类属性类似可以通过类名.方法名来使用。

Notice

因为对于类属性,我们通过实例也可以访问,所以这个地方有个小问题可能会迷惑到你。看下面的例子:

复制代码
1
2
3
4
5
6
7
8
9
10
class A(object): n = 0 def __init__(self): pass a = A() print(a.n) a.n = 9 print(a.n) print(A.n)

你会发现结果可能跟你想的不一样,因为我们用a.n = 9了,但是最后输出的A.n还是0,这是因为我们通过a.n = 9并不是访问,而是创建了一个实例对象,所以要注意这个地方。

  • 通过 实例名.属性="xxx"的时候,如果属性有(实例属性),则赋值;如果属性无,则增加一个实例属性。
  • 通过a = 实例名.属性的时候,如果有这个实例属性,返回这个实例属性;如果无,则看是否有该类属性;如果还无,则报错;
  • 即要注意访问和赋值的区别

静态方法

静态方法和其他语言中的差不多,定义如下:

复制代码
1
2
3
4
5
class A(object): @staticmethod def s(): pass

唯一区别就是上面多了个@staticmethod代表是一个静态方法,静态方法一般不需要访问类中内容,也不需要访问实例内容,所以就定义成静态的。

区别

  • 如果只需要访问实例属性/方法,则定义为实例方法
  • 如果需要访问类属性/方法,则定义为类方法
  • 如果什么都不需要,则定义为静态方法

最后

以上就是无语滑板最近收集整理的关于实例属性_方法 类属性_方法 静态方法实例属性/方法 类属性/方法 静态方法的全部内容,更多相关实例属性_方法内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部