我是靠谱客的博主 无语滑板,最近开发中收集的这篇文章主要介绍实例属性_方法 类属性_方法 静态方法实例属性/方法 类属性/方法 静态方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

标签: python


实例属性和方法

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

class A(object):
pass
a = A()

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

class A(object):
def __init__(self):
self.name = "xx"
def f1(self):
print("f1")
a = A()

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

类属性和类方法

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

class A(object):
n = 0

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

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

class A(object):
@classmethod
def ff(cls):
print("")
n = 0

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

Notice

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

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 = 实例名.属性的时候,如果有这个实例属性,返回这个实例属性;如果无,则看是否有该类属性;如果还无,则报错;
  • 即要注意访问和赋值的区别

静态方法

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

class A(object):
@staticmethod
def s():
pass

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

区别

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

最后

以上就是无语滑板为你收集整理的实例属性_方法 类属性_方法 静态方法实例属性/方法 类属性/方法 静态方法的全部内容,希望文章能够帮你解决实例属性_方法 类属性_方法 静态方法实例属性/方法 类属性/方法 静态方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部