python实例方法、类方法和静态方法

python实例方法、类方法和静态方法

在说这些之前先说一下什么是实例变量、类变量和全局变量。

实例变量(实例属性)

对象.实例变量名 = 表达式 (“asd”,2) #创建或者修改变量
v = 对象(实例).实例变量名 #属性的取值操作
del 删除实例变量:
del 对象.属性名
预置的实例变量:
dict 属性字典 绑定的是一个字典,存储的方式是 key-value 一对键值对
class 返回创建此实例的类
type 同class

类变量(类属性)

类变量是类的属性,此属性属于类,不属于类的实例
作用:
通常用来存储此类创建的对象的共有的属性
说明:
1、类变量可以通过类直接访问
2、类变量可以通过类的实例直接访问
3、类变量可以通过此类的__class__属性间接去访问
e.g
class Dog:
color = “白色”
def init(self):
pass
d = Dog()
print(Dog.color) #通过类名直接访问
print(d.color) #通过对象去访问类变量
print(d.class.color) #通过__class__间接去访问

类方法:

@classmethod
类方法是用于描述类的行为的方法,类方法属于类,但不属于该类创建的对象
说明:
1、类方法需要用到 @classmethod
2、类方法至少有一个形参,第一个形参用于绑定类,约定写为’cls’
3、类和该类的实例都可以调用类方法
4、类方法不能访问此类创建的对象的实例属性
class Dog:
@classmethod
def fun(cls, s):
print("%s" % s)
d = Dog()
d.fun(“实例调用的”)
Dog.fun(“类调用的”)

静态方法:

静态方法是定义在类内部的函数,此函数的作用域是类的内部
说明:
1、静态方法需要使用 @staticmethod
2、静态方法与普通函数定义相同,不需要传入self实例参数和 cls 参数
3、静态方法只能凭借该类或者该类创建的对象来调用
4、静态方法不可以访问类变量和实例变量
class Dog:
“”“这是一个狗类,这里面全是小白狗”""
@staticmethod
def fun(name):
print(“这是一个静态方法”)
d = Dog()
d.color = “red”
d.fun()
Dog.fun()

关于三种方法的使用,有一些要注意的地方:

实例方法、类方法、静态方法、函数

1、实例方法能访问实例变量,类变量和全局变量
2、类方法不能访问实例变量,但是能访问类变量和全局变量
3、静态方法不能放问实例变量,类变量,但是能访问全局变量
4、函数只能访问全局变量
下面举个例子:

class A():
    global sex
    name="小明"
    age=16
    def fun(self,age,name,sex):
        print("这是一个实例方法%s   姓名%s    性别%s" % (age,self.name,sex))
    @classmethod
    def fun1(cls,name,sex):
        print("这是一个类方法%s    性别%s" % (cls.name,sex))
    @staticmethod
    def fun2(name,sex):
        print("这是一个静态方法%s   性别%s" % (name,sex))
sex=2
a=A()
a.age=18            #修改了这个实例对应的变量的值,修改的值只是这个对象对应的值,而不会改变类变量本身的值
a.fun(a.age,123,sex)        #这里age传入的是一个数值,name传的是类变量,所以无论你写什么传入的仍是类本身定义的变量,如果fun函数把self给去掉,则传入的就是数值了
a.fun(81,a.name,sex)         #这里age传入的是实例变量,sex是全局变量
b=A()
b.fun1(123,sex)     #这里可以传入类变量和全局变量,如果传入的是实例变量则运行不了
c=A()
c.fun2(123,sex)     #这里name只能传入数值,但是能传入全局变量

输出结果是:
在这里插入图片描述

以上就是我对这三种方法的理解!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值