zoukankan      html  css  js  c++  java
  • python面度对象(属性,类方法,静态方法)

    一. 属性

      所谓的属性,就是将一个类中的方法伪装成一个属性.在代码的级别是没有任何本质上的提升.但是让代码看起来更顺眼.

      property 装饰器函数,内置函数,帮助你将类中的方法伪装成属性(特性).

        调用方法的时候不需要主动加括号

        让程序的逻辑性更加合理

      使用方法:

        @porperty.setter 装饰器,修改被property装饰的属性的时候会调用被这个装饰器装饰过的方法,除了self之外还有一个参数:被修改的值

        @property.deleter 装饰器,当要删除被property装饰的属性的时候回调用被这个装饰器装饰过的方法.

    class Person:
        def __init__(self,name,age):
            self.name = name
            if type(age) is int:
                self.__age = age
            else:
                print( '你输入的年龄的类型有误,请输入数字')
        @property   #属性的查看. 装饰器的用法
        def age(self):
            return self.__age
    
        @age.setter     #属性的修改
        def age(self,a1):
            '''判断,你修改的年龄必须是数字'''
            if type(a1) is int:
                self.__age = a1
            else:
                print('你输入的年龄的类型有误,请输入数字')
    
        @age.deleter    #属性的删除
        def age(self):
            del self.__age
    
    
    p1 = Person('帅哥',20)
    print(p1.age)
    p1.age = 23  #看上去更像是对某一个属性进行操作
    print(p1.age)
    del p1.age
    print(p1.__dict__)
    class Circle:
        def __init__(self,r):
            self.r = r
    
        @property
        def area(self):   #  这个方法计算结果本身就是一个属性,但是这个属性会随着这个类/对象的一些基础变量的变化而变化(本身是一个运算过程,但伪装成了一个属性)
            return 3.14*self.r**2
    
    c = Circle(5)
    print(c.area)
    c.r = 10
    print(c.area)

    二. 类方法

      classmethod 类方法的装饰器 ,内置函数

      使用类名调用,默认传类名作为第一个参数

      不用对象命名空间中的内容,而用到了类命名空间中的变量(静态属性),或者类方法或静态方法

      类方法:通过类名调用的方法,类方法中第一个参数约定俗成为cls, python自动将类名(类空间)传给cls. 

    class A:
        def func(self):  # 普通方法
            print(self)
    
        @classmethod  # 类方法
        def func1(cls):
            print(cls)
    
    a1 = A()
    a1.func()
    
    A.func(a1)
    
    A.func1()
    
    a1 = A()
    a1.func1()  # 对象调用类方法,cls 得到的是类本身.

      类方法的使用场景:

        1. 类中有些方法不需要对象的参与时

    class A:
        name = 'ale'
        count = 1
    
        @classmethod
        def func1(cls):  # 此方法无需对象参与
            return cls.name + str(cls.count + 1)
    
    a1 = A()
    print(a1.func1())
    print(A.func1())

        2.对类中的静态变量进行改变.

        3.继承中,父类得到子类的类空间.

      也可以不通过类方法,让父类中的某个方法得到子类空间的任意值

    class A:
        age = 12
    
        def func2(self):
            print(self)  # self 子类的对象,能得到子类 空间的任意值
    
    class B(A):
        age = 22
    
    b1 = B()
    b1.func2()

    三. 静态方法

      静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。可以理解为将静态方法存在此类的名称空间中。事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数

      @staticmethod 装饰静态方法  内是函数

      如果一个类里面的方法,即不需要用到self中的资源,也不用cls中的资源

      相当于一个普通的函数

      但是你由于某种原因,还要把这个方法方法放在类中,这个时候,就将这个方法变成一个静态方法

      好处:

        代码块清晰

        提高复用性

     

      

  • 相关阅读:
    SpringBoot-整合多数据源
    SpringBoot-整合@transactional注解
    SpringBoot-整合mybatis
    SpringBoot-区分不同环境配置文件
    SpringBoot-@value自定义参数
    SpringBoot-@async异步执行方法
    bias与variance,欠拟合与过拟合关系
    从贝叶斯到深度学习各个算法
    基础机器学习算法
    推荐算法总结
  • 原文地址:https://www.cnblogs.com/dong-/p/9379129.html
Copyright © 2011-2022 走看看