zoukankan      html  css  js  c++  java
  • 面向对象 的属性 类方法 静态方法

    一、面向对象的成员包括:字段(普通字段属于对象,静态字段属于类)、方法、属性

      属性:为什么引入属性?      先看个例子!!!

      

    例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)
    
    成人的BMI数值:
    过轻:低于18.5
    正常:18.5-23.9
    过重:24-27
    肥胖:28-32
    非常肥胖, 高于32
      体质指数(BMI)=体重(kg)÷身高^2(m)
      EX:70kg÷(1.75×1.75)=22.86
    
    
    
    class Person:
        def __init__(self, name, weight, height):
            self.name = name
            self.height = height
            self.weight = weight
    
        def bmi(self):
            return ('%s 的 BMI指数为 %s' % (self.name, (self.weight / self.height ** 2)))
    
    
    b = Person('王帆', 67, 1.78)
    print(b.bmi())

    此时代码能够实现该功能 ,但是,bim是一个名词,相当于一种属性,但是在代码中却执行了bmi方法,并且打印的时候需要打印b.bmi()  而不是 b.bmi,所以,在python中不合理,需要进行改进。

    此时引入了属性。

    属性,就是将方法伪装成一个属性,代码本身没有提升,只是更加合理。

    例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)
    
    成人的BMI数值:
    过轻:低于18.5
    正常:18.5-23.9
    过重:24-27
    肥胖:28-32
    非常肥胖, 高于32
      体质指数(BMI)=体重(kg)÷身高^2(m)
      EX:70kg÷(1.75×1.75)=22.86
    
    
    class Person:
        def __init__(self, name, weight, height):
            self.name = name
            self.height = height
            self.weight = weight
    
        @property     # 在需要调用的函数上方 添加 @property 这个装饰器,将bmi方法伪装成一个属性
        def bmi(self):
            return ('%s 的 BMI指数为 %s' % (self.name, (self.weight / self.height ** 2)))
    
    
    b = Person('王帆', 67, 1.78)
    print(b.bmi)      # 打印的时候为 b.bmi 而不用再加括号。

    属性的应用:

      

    二、类方法:用类名调用的方法,类方法中约定俗成第一个参数为cls。python自动将类名传给cls。

      

      类方法的应用场景

      第一:

      

      第二:对类中的静态变量进行改变。

            对象无法对类中的静态变量进行改变。

      第三:在继承中,父类要得到子类的类空间,在里边为所欲为。

      

    三、静态方法

      

      静态方法好处:

      1、当类有多个函数的时候,可以将实现一个功能的多个函数放到一个类中,是代码块更加清晰。

      2、可以将静态变量放在父类中。如果有好多子类都继承父类,就能够节约代码。提高太妈的复用性。

  • 相关阅读:
    oracle 数据库关闭的的几种方式总结
    oracle热备份
    oracle 的 startup,startup mount,startup nomount之间的区别
    Oracle数据导入导出imp/exp命令总结
    oracle模糊查询效率可这样提高
    流程控制
    常量
    java序列化
    JVM锁说明
    go变量和数据类型
  • 原文地址:https://www.cnblogs.com/wf123/p/9378387.html
Copyright © 2011-2022 走看看