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


    一.属性

    定义:将一个方法  伪装成一个 属性,在代码的级别上没有本质的提升,但是让其看起来跟合理.
    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)
    总结:通过 @property bmi伪装成Person 的一个属性,可以进行 改动
    属性的改, 删除
    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
    print(p1.age)
    del p1.age

    二. 类方法:

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

    class A:
        def func(self):  # 普通方法
            print(self)
        @classmethod  # 类方法
        def func1(cls):
            print(cls)
    a1 = A()
    A.func1()
    a1.func1()  # 对象调用类方法,cls 得到的是类本身.
    
    a1.func()  #得到A类空间的内存地址
    A.func(11)   #喝函数调用一样,现在是在类中,必须加A.传值
    类方法的应用场景:
    1, 类中 有些方法是不需要对象参与.
    class A:
        name = 'alex'
        count = 1
    
        @classmethod
        def func1(cls):  # 此方法无需对象参与
            return cls.name + str(cls.count + 1)
    print(A.func1()) #不可取
    print(A.func1())
    
    结果: 
    alex2
    alex2
    2, 对类中的静态变量进行改变,要用类方法.  通过cls. 更改
    class A:
        count  = 12
        name = 'alex'
        @classmethod
        def func1(cls):
        cls.age = '000'
    class B(A):
        age = 22
    print(B.__dict__)
    
    结果为:
    {'__module__': '__main__', '__doc__': None, 'age': 22}
    3,继承中,父类得到子类的类空间.
    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,复用性.
  • 相关阅读:
    Abp vNext 模块化系统简单介绍
    CLR via C# 笔记 -- 计算限制的异步操作(27)
    CLR via C# 笔记 -- 线程基础(26)
    Redis 入门
    .NET Core 中生成验证码
    CLR via C# 笔记 -- 异常和状态管理(20)
    CLR via C# 笔记 -- 托管堆和垃圾回收(21)
    CLR via C# 笔记 -- 字符、字符串、文本处理(14)
    广州公司黑名单
    总博客教程全导航
  • 原文地址:https://www.cnblogs.com/shuai1993/p/9378348.html
Copyright © 2020-2023  润新知