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

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

标签: 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代表是一个静态方法,静态方法一般不需要访问类中内容,也不需要访问实例内容,所以就定义成静态的。

区别

  • 如果只需要访问实例属性/方法,则定义为实例方法
  • 如果需要访问类属性/方法,则定义为类方法
  • 如果什么都不需要,则定义为静态方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值