热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python类方法和静态方法总结

前言:方法:方法是动态的是对象的行为,比如一个人可以跑,跳,是指具体做了什么动作或者行为属性:属性是固有的是对象本身多携带的

前言:
方法:方法是动态的是对象的行为,比如一个人可以跑,跳,是指具体做了什么动作或者行为
属性:属性是固有的是对象本身多携带的比如一个人的年龄,名字

类属性和实例属性
1.类属性就相当于全局变量是类对象和实例对象所共有的属性
2.实例对象的属性为实例对象所私有的

class Test(object):Lx = 'python'__age = 27def __init__(self,age):self.age = agepasstest = Test(20)
print(test.age) # 实例对象查看实例属性 正常访问
print(test.Lx) # 实例对象查看类属性 正常访问
print(Test.Lx) # 类对象查看类属性 正常访问
print(Test.age) # 类对象查看实例属性,这里会报错print(test.__age) #错误,不能在类外通过实例对象访问私有的类属性
print(Test.__age) #错误,不能在类外通过类对象访问私有的类属性#运行结果
20
python
python
------报错------
------报错------
------报错------

综上:
1.类对象可以访问类属性
2.类对象不能访问实例属性
3.实例对象可以访问实例属性和类属性,和类属性是包含关系

类方法和实例方法对比
1.类方法:类对象所拥有的方法,需要用装饰器@classmethod来标识其为类方法,类方法的第一个参数必须是类对象,类方法可以通过类对象和实例对象调用,类似与类属性可以被类对象和实例对象调用一样
2.实例方法:实例方法的第一个参数是实例对象self,通过self引用类属性或者实例属性,但是在相同名称的类属性和实例属性中,会先调用实例属性,因为实例属性优先级更高

class Test:name = 'Lx'# 类方法 用classmethod来装饰@classmethoddef quety_name(cls):return cls.name # 访问类属性@classmethoddef change_name(cls,info):cls.name=info # 在类方法中修改类属性return cls.name@classmethoddef get_name(cls):return Test.name # 通过类对象引用类属性print(Test.quety_name()) # 类对象调用类方法
print(Test.change_name("kobe")) # 类对象修改类属性
print(Test.get_name()) # 类对象调用类属性
test = Test()
print(test.change_name('James')) # 实例对象调用类方法输入结果
Lx
kobe
kobe
James

注意点:
1…cls 指向 类对象(也就是Test)
2.一般以cls作为第一个参数,cls 也可以是其他名称,但是一般默认为cls

静态方法:
1.静态方法不需要额外定义参数,所以在静态方法中引用类属性的话,必须使用类对象的方法来引用
2.Python中的静态方法与python类级别的方法极为相似,不同之处在于静态方法绑定到一个类而不是该类的对象。这意味着可以在没有该类对象的情况下调用静态方法。 这也意味着静态方法无法修改对象的状态,因为它们没有绑定到对象。

创建静态方法有两种方式:

第一种:class Test:def get_result(x,y):result = x + yreturn result
Test.get_result = staticmethod(Test.get_result)
print("result:",Test.get_result(1,2))输出
result: 3第二种:class Test:@staticmethoddef get_result(x,y):result = x + yreturn resultprint("result:",Test.get_result(1,2))输出
result: 3

1.静态方法有一个非常明确的用例。 当我们需要某些功能而不是对象,而需要完整的类时,我们可以使方法静态化。 当我们需要创建Utility方法时,这是非常有利的,因为它们通常与对象生命周期无关。
2.请注意,在静态方法中,我们不需要将self作为第一个参数传递。

# 打印当前系统时间
import time
class Time:@staticmethoddef showTime():return time.strftime("%H:%M:%S",time.localtime())passprint(Time.showTime())


推荐阅读
author-avatar
豪哥帅366
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有