面向对象 的属性 类方法 静态方法

时间:2021-11-15 19:28:36

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

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

  

例一: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、可以将静态变量放在父类中。如果有好多子类都继承父类,就能够节约代码。提高太妈的复用性。