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算法补充】

  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12304605.html
Copyright © 2011-2022 走看看