首页 > 编程语言 > 详细

python 类对象,类属性,静态方法,类方法

时间:2020-06-10 18:37:35      阅读:42      评论:0      收藏:0      [点我收藏+]

1.实例对象属性和实例方法

class Cat(object):
    def __init__(self,name):
        # 定义一个实例 属性
        self.name = name
    # 定义了一个实例方法
    def info(self):
        print(self.name)
    def show(self):
        print(Show Run :)
        self.info()

#
测试

# 创建一个实例对象
tom = Cat(Tom) # 使用实例属性 print(tom.name) # 使用实例方法 tom.info() tom.show() # Python中万物皆对象 Cat.show(tom) # 一般不这样用,一般都是用实例对象调用实例属性和方法
输出:
Tom
Tom
Show Run :
Tom
Show Run :
Tom
# 结论:
# 为什么类名不能调用 实例 对象属性和实例对象方法呢?
# 因为类对象存在时,不一定有实例对象存在
# 实例属性和实例方法只能由实例对象调用

2.类对象和类属性

如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。
class ClassRoom(object):
    # 当定义一个类属性时,相当于这个类中的全局变量
    # 该类的所有对象都 可以使用该 类属性
    # 可以在所有的对象间进行数据共享
    center_kong_tiao = 格力空调
    # 实例方法
    def show(self):
        print(实例方法中去访问类属性:)
        print(ClassRoom.center_kong_tiao)
# 测试
cr901 = ClassRoom()
print(cr901.center_kong_tiao)
cr902 = ClassRoom()
print(cr902.center_kong_tiao)
cr901.center_kong_tiao = 海尔空调
print(cr901.center_kong_tiao)
print(cr902.center_kong_tiao)
ClassRoom.center_kong_tiao = 海尔空调
print(cr901.center_kong_tiao)
print(cr902.center_kong_tiao)
# 输出:
格力空调
格力空调
海尔空调
格力空调
海尔空调
海尔空调

3.类方法

定义格式:
@classmethod
def 方法名(cls,...):
  pass
 
调用格式:
类对象.类方法名
 
注意:
在类方法中,不能使用self
但是可以使用 cls,该参数用来表示 当前类对象,这个参数也是自动传递的
 
应用场景:
一般在设计类时,如果有类方法,该类一般不会去实例对象,直接使用类对象来操作(比如:数学函数类)
一般用来定义工具类使用
Math.max(1,2)
class MyMath(object):
    # 定义一个类属性
    n = 999
    # 标准格式
    @classmethod  # 这是一个装饰 器,用来表示下面的方法是一个类方法
    def sum(cls,*args):
        print(cls.n)
        m = 0
        for i in args:
            m += i
        return m
    # @classmethod 是一个装饰 器,用来修饰一个方法成为类方法,当在执行该 类方法时,解释 会自动 将类对象传递到参数 cls中
    @classmethod
    def show(cls):
        print(show class method)
# 执行类方法 print(MyMath.sum(1,2,3,4,5)) mm = MyMath() print(mm.sum(1, 2, 3, 4, 5)) MyMath.show()
输出:
999
15
999
15
show class method

4.静态方法

格式:
@staticmethod
    def 方法名(参数列表....):
        pass    
调用方式:
同类方法
类对象.静态方法名()
 
设计目的:
静态方法实际上就是放到类当中的一堆普通函数
 
作用:
  静态方法同类方法相似,也是在不需要实例对象产生的条件下,可以使用静态方法来实现
  一般这两种方法,都是用在工具类的实现上.
  通过类,将一系列的功能方法进行整合到一起.
# 设计 一个编码工具类
 
class EncodeUtil(object):
    n = 1
    # 编码方法
    @staticmethod
    def encode_data(data, format):
        print(f对数据 {data} 使用 {format} 格式 进行了编码)
    # 解码方法
    @staticmethod
    def decode_data(data, format):
        print(EncodeUtil.n)
        print(f对数据 {data} 使用 {format} 格式 进行了解编码)
# 测试
eu = EncodeUtil()
eu.encode_data(hello,utf-8)
EncodeUtil.encode_data(Hello,utf-8)
EncodeUtil.decode_data("hello",GBK)
输出:
对数据 hello 使用 utf-8 格式 进行了编码
对数据 Hello 使用 utf-8 格式 进行了编码
1
对数据 hello 使用 GBK 格式 进行了解编码    

5.总结

# 实例方法,必须通过实例对象调用执行,(第一个参数是当前调用该方法的实例)。
 
# 类方法, 当不需要产生实例对象时,可以使用类方法来实现相应的代码功能,类方法可以直接使用类对象来调用,类方法的第一个参数是 cls,用来接收当前类对象,通过这个参数,
可以各个类方法中进行共享数据。
 
# 静态方法, 作用同类方法相似,但是静态方法不接收任何默认参数(实例对象或类对象),静态方法其实就是将一些相关联的普通方法使用类进行整合。
 
# 类方法和静态方法,一般在使用时,大多数用来实现工具类。

 

python 类对象,类属性,静态方法,类方法

原文:https://www.cnblogs.com/tanhuan-share/p/13086894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!