• 面向对象-属性-类方法,静态方法


    一,属性:

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

    property:是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值

    property一般用于类似于bmi,area,周长等需要计算的名词上

    class Person:
        def __init__(self,name,hight,weight):
            self.name = name
            self.__hight = hight  #私有化
            self.__weight = weight
        def bmi(self):
            return '%s 的bmi 值%s' % (self.name, self.__weight / self.__hight ** 2)
    p1 = Person('张三',1.7,60)
    print(p1.bmi())
    #结果:张三 的bmi 值20.761245674740486

    使用@property

    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.7,60)
    print(p1.bmi)  #bmi方法伪装成属性
    #结果:张三 的bmi 值20.761245674740486

    属性的操作(增,改,删):

    class Person:
        def __init__(self,name,age):
            self.name = name
            self.__age = age if type(age) is int else print('你输入的年龄的类型有误,请输入数字')
        @property
        def age(self):
            return self.__age
        @age.setter  #改/增
        def age(self,a1):
            self.__age = a1 if type(a1) is int else print('你输入的年龄的类型有误,请输入数字')
        @age.deleter  #
        def age(self):
            del self.__age
    
    p1 = Person('张三',20)
    print(p1.age)
    p1.age = 23  #修改
    print(p1.age)
    del p1.age  #删除
    print(p1.__dict__)
    #结果:
    20
    23
    {'name': '张三'}

    二.类方法(classmethod),静态方法(staticmethod)

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

    类方法的应用场景:

    1.类中有些方法不需要对象参与

    class A:
        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())  #用类名调用cls得到的是类本身,所以不需要传参

    2.对象中的静态变量进行改变,需要类方法

    class A:
        age = 12
        @classmethod
        def func(cls):
            cls.age = 22  #修改
            print(cls.age)
    A.func()
    print(A.__dict__)

    3.继承中父类得到子类的空间 可以做任意操作

    class A:
        age = 12
        @classmethod
        def func(cls):
            cls.age = 30 #将B类中的age改成30 也可删除增加任意操作
            print(cls.age) #self 子类的对象,能得到子类空间的任意值
    class B(A):
        age = 22
    B.func()
    print(A.__dict__)
    print(B.__dict__)

    静态方法:

    class A:
        @staticmethod
        def func(username,password):
            if username == 'alex' and password == 123:
                print('登录成功')
            else:
                print('登录失败')
    A.func('alex',123)

    作用:1.代码块,清晰

    2.复用性

  • 相关阅读:
    MySQL数据库“局部”乱码
    每个人都可以写博客
    命令行导入SQL文件
    数据库连接扩展
    PHP程序设计经典300例
    C# 调用外部dll
    asp.net中实现文件下载功能
    Windows10下Docker的安装
    java基础——面向对象
    java基础——第一章概述
  • 原文地址:https://www.cnblogs.com/ITdong-1/p/9378855.html
Copyright © 2020-2023  润新知