• 六、Python类的高级知识


    一、类

    情景:

    1. 如果不实例化一个类能否调用其中的函数
    2. 类里面的函数如何减弱跟类的关系,在一起只是为了代码方便整洁

    1.实例方法

    示例:

    class TEST():
        def __init__(self):
            self.hello='nihao'
    
        def printf(self):
            for i in range(1,5):
                print(str(i) + self.hello)
    
    
    test = TEST()
    test.printf()
    
    结果:
    1nihao
    2nihao
    3nihao
    4nihao
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    解释:上诉例子就是类的实例方法,必需先实例化一个类,然后才能调用类里面的函数,如果不实例化直接调用,它就会报错缺失self参数,看其与下面内容的对比就能更加深入理解

    2.静态方法

    示例:

    class TEST():
        def __init__(self):
            self.hello='nihao'
        @staticmethod
        def printf():
            for i in range(1,5):
                print(str(i))
    
    
    TEST.printf()
    结果:
    1
    2
    3
    4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    解释:上述例子就实现不实例化就能够对函数进行调用,Django中urls文件里面写函数的方法就很像这个,直接调用

    静态方法:不能有self参数;不能调用TEST()里面的任何东西;静态方法使得方法更像是一段独立函数

    3.类方法

    示例:

    class TEST():
        hello = 'today'
    
        def __init__(self):
            self.hello = 'nihao'
    
        @classmethod
        def printf(cls):
            for i in range(1, 5):
                print(str(i) + cls.hello)
    TEST.printf()
    结果:
    1today
    2today
    3today
    4today
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    解释:上诉例子也实现了直接调用类的函数

    类方法:类方法可以接受cls作为参数,这就意味着类方法可以读取或修改类的状态,如上cls.hello读取到的并不是self.hello = 'nihao'而是在def __init__外面定义的hello

    二、对象属性和类方法[判断、获取、添加、删除]

    1.判断

    格式:hasattr(obj, name) #存在返回True,不存在返回False

    class view:
        name = 152
        def titile(self):
            jack = '18'
    
    a = view()
    print(hasattr(view, 'name'),hasattr(view, 'titile')) # True True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.获取

    格式:getattr(obj, name, default)# 查询到返回查询值,找不到返回第三个参数

    class view:
        name = 152
        def titile(self):
            jack = '18'
    
    a = view()
    print(getattr(view, 'name',False),getattr(view, 'titie',False))# 152 False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3添加

    格式:setattr(obj, name, value) # 第二个参数是名称,第三个参数是内容

    def append(self):
        print(985)
    class view:
        name = 152
        def titile(self):
            print(55555555555)
    
    a = view()
    
    setattr(view,'get',append)
    setattr(view,'oppo','555')
    a.get()
    print(a.oppo)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4.删除

    格式:delattr(c,'name')

    class c:
        name = 999  # 类属性
    
        def __init__(self):
            lo = 66  # 对象属性
    
    a = c()
    delattr(c,'name')
    
    print(c.name) #AttributeError: type object 'c' has no attribute 'name'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    删除类属性:

    1. del c.name
  • 相关阅读:
    歌尔气压计SPA06-003在无人机和手表上的创新应用
    c语言字符指针、字符串初始化问题
    【luogu SP7685】FLWRS - Flowers(DP)(容斥)
    软件测试不行了?互联网内卷严重?我看未必吧
    论文阅读(5)栉水母利用涡流反弹动力学,胜过其他凝胶状的游泳者
    Qt-FFmpeg开发-回调函数读取数据(8)
    mybatis LambdaQueryWrapper之复杂与或非sql逻辑编写
    1985-2023年6月全球各国经济政策不确定性数据
    内网横向移动——SNMP获取信息
    『牛客|每日一题』走迷宫
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/134021446