zoukankan      html  css  js  c++  java
  • python学习Day20--属性、类方法和静态方法+类多继承算法补充

    【知识点】

     1、属性:将一个方法 伪装成一个 属性,在代码的级别上没有本质的提升,但是然其看起来合理

      @property

     1 class Person:
     2     def __init__(self,name,hight,weight):
     3         self.name=name
     4         self.__hight=hight
     5         self.__weight=weight
     6 
     7     @property       #添加property实现bmi动词变名词
     8     def bmi(self):
     9         return "%s的bmi值%s" % (self.name,self.__weight/self.__hight**2)
    10 
    11 p1=Person('大秧歌',1.68,70)
    12 print(p1.bmi)    # 不添加括号
    13 # 在不添加property的情况下,实现方法的调用为p1.bmi(),而添加了@property后,实现方法的功能调用如上

    2、属性的改(@属性名.setter)

    # 对age输入进行类型判断,也实现私有属性的修改

    3、属性的删:(@属性名.deleter)  在方法中添加del self.__age    (很少用,了解)

    4、类方法:(@classmethod)通过类名调用的方法,类方法中第一个参数约定俗称cls,python自动将类名(类空间)传给cls

       应用场景:①类中 有些方法是不需要对象参与的

            ②对类中的静态变量进行改变

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

     1 # 类方法
     2 class A:
     3     def func(self):  #普通方法
     4         print(self)
     5 
     6     @classmethod     #类方法
     7     def func1(cls):
     8         print(cls)
     9 # a1=A()
    10 # a1.func()  # python自动传参
    11 # A.func(a1) # 主动传参
    12 A.func1()    #<class '__main__.A'>
    13 a1=A()
    14 a1.func1()   #<class '__main__.A'> #对象调用类方法,cls得到的是类本身
     1 # 应用场景
     2 # 类中 有些方法是不需要传入对象,不要对象的一切东西
     3 class A:
     4     name='abc'
     5     count=1
     6     
     7     def func(self):
     8         return A.name+str(A.count+1)
     9 # A.func(111)  # 不可取
    10 a1=A()
    11 print(a1.func()) # 无需对象参与,但是又必须实例化一个的对象
    12 
    13 
    14 
    15 # 使用类方法来改善这个情况
    16 class A:
    17     name='abc'
    18     count=1
    19 
    20     @classmethod
    21     def func(cls):  # cls就是类名
    22         return cls.name+str(cls.count+1)
    23 print(A.func())  #不像上面那样调用类方法需要传参
     1 # 应用场景
     2 # 继承中,父类得到子类的类空间
     3 class A:
     4     name='abc'
     5     age=12
     6 
     7     @classmethod
     8     def func(cls):
     9         # 若有B.func(),则此时可以对B的所有内容进行修改
    10         cls.hight=20   # 修改B类中的静态比变量
    11 class B(A):
    12     hight=12
    13     width=15
    14 
    15     def f(self):
    16         print('B')
    17 B.func()
    18 print(B.hight)  # 20  已经被修改
    19 #此方法,不仅能调用子类空间的任意值,还可以进行修改
    20 #*****************************************************
    21 class A:
    22     name='abc'
    23     age=12
    24 
    25     def func1(self):
    26         #通过B实例化对象b1.func1(),能得到子类 空间的任意值
    27         print(self)
    28 
    29 class B(A):
    30     hight=12
    31     width=15
    32 
    33     def f(self):
    34         print('B')
    35 b1=B()
    36 b1.func()
    37 # 此方法只能调用子类空间的任意值,但是不能修改

    5、静态方法:(@staticmethod)

     1 # 静态方法
     2 class A:
     3 
     4     @staticmethod
     5     def login(username,password):   # 参数不固定,自由传参
     6         if username=='123' and password==123:
     7             print("登录成功")
     8         else:
     9             print("登录失败")
    10 
    11 A.login('123',123)  # 登录成功
    12 # 为什么要在类中定义一个普通的函数?
    13 #1,形成代码块:清晰
    14 #2,复用性

     【类多继承C3算法补充】

  • 相关阅读:
    CentOS5.6下SVN的安装
    在servlet中的init方法中使用getInitParameter方法空指针错误
    Linux iostat监测IO状态【转】
    自己实现一个list比较器 实现Comparator()接口
    一些常用的随机实现
    java里null强转为某个类会报错吗?
    java游戏服务器简单工厂模式
    起个头!准备写一个 设计模式系列
    HashMap根据value值排序
    java游戏服务器 策略+简单工厂
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12304605.html
Copyright © 2011-2022 走看看