• 属性,类方法,静态方法,Python2和3方法


    属性

    属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理.
    @property ***
    @属性名.setter **
    @属性名.deleter *

    #属性的初识
    class Person:

    def __init__(self,name,hight,weight):
    self.name = name
    self.__hight = hight
    self.__weight = weight
    @property
    def bmi(self):
    return '%s 的bmi 值%s' %(self.name,self.__weight / self.__hight ** 2)

    p1 = Person('大阳哥',1.68,70)
    print(p1.bmi()) #原来的执行方法
    print(p1.bmi) #添加@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)
    print(p1.__dict__)
    p1.age = 23 #出现这个,立即执行@age,setter
    print(p1.age)
    del p1.age #出现这个,立即执行@age.deleter

    # property : 类似于bmi这种,area,周长.... ***
    # @age.setter **
    # @age.deleter *

      

    04 类方法
    @classmethod
    只能有类名调用(对象调用,传给cls参数的也是该对象的所属类).
    使用场景:
    1,无需对象参与.
    2,对类中的静态变量进行修改.
    3,在父类中类方法得到子类的类空间,为所欲为.

    05 静态方法
    @staticmethod
    1,代码块.清晰.
    2,复用性.

    类方法
    
    class A:
        def func(self):  # 普通方法
            print(self)
    
        @classmethod  # 类方法
        def func1(cls):
            print(cls)
    
    
    a1 = A()
    
    a1.func()
    A.func(a1)
    
    
    类方法: 通过类名调用的方法,类方法中第一个参数约定俗称cls,python自动将类名(类空间)传给cls.
    A.func1()
    
    a1 = A()
    a1.func1()  # 对象调用类方法,cls 得到的是类本身.
    
    
    类方法的应用场景:
    1, 类中 有些方法是不需要对象参与.
    
    class A1:
        name = 'alex'
        count = 1
    
        @classmethod
        def func1(cls):  # 此方法无需对象参与
            return cls.name + str(cls.count + 1)
    
    A.func1(111) 不可取
    a1 = A()
    print(a1.func1())
    print(A.func1())
    
    
    
    2, 对类中的静态变量进行改变,要用类方法.
    
    3,继承中,父类得到子类的类空间.
    
    class A:
        age = 12
        @classmethod
        def func1(cls):  # 此方法无需对象参与
            # print(cls)
            # 对B类的所有的内容可以进行修改.
            print(cls.age)
            # return cls.name + str(cls.count + 1)
    
    class B(A):
        age = 22
    B.func1()
    
    不通过类方法,想让我的父类的某个方法得到子类的类空间里面的任意值.
    class A:
        age = 12
    
        def func2(self):
            print(self)  # self 子类的对象,能得到子类 空间的任意值
    
    class B(A):
        age = 22
    
    b1 = B()
    b1.func2()
    
    # 静态方法:
    class A:
    
        @staticmethod
        def login(username, password):
            if username == 'alex' and password == 123:
                print('登录成功')
            else:
                print('登录失败...')
    
    
    A.login('alex',1234)
    
    # def login(username,password):
    #     if username == 'alex' and password == 123:
    #         print('登录成功')
    #     else:
    #         print('登录失败...')
    #
    # login('alex',1234)
    
    # 1,代码块.清晰.
    # 2,复用性.
    

      

    补充:
    # python2x python3x区别

    #源码不一样
    Python2x: 各种按照自己代码的习惯给python贡献源码:(java的源码的习惯,C#源码的习惯),导致:源码混乱,重复代码高.
    python3x:龟叔重写.源码 优美,清晰,简单.

    1,python2x : print() print range()--->[1,2,3] raw_input() input(数字) 等等
    1,python3x : print() range() 可迭代对象 input() 等等

  • 相关阅读:
    POJ1222_EXTENDED LIGHTS OUT
    SGU196_Matrix Multiplication
    ZOJ3772_Calculate the Function
    Triangle POJ
    POJ 2187 Beauty Contest(凸包,旋转卡壳)
    [Neerc2016]Mole Tunnels (模拟费用流)
    [2019ccpc网络赛】K-th occurrence(后缀数组+主席树)
    【HDU2019多校】E
    Gym
    P3160 [CQOI2012]局部极小值(dfs+状压dp)
  • 原文地址:https://www.cnblogs.com/duanpengpeng/p/9377942.html
Copyright © 2020-2023  润新知