zoukankan      html  css  js  c++  java
  • 面向对象----属性,类方法,静态方法

    一.属性

    定义:将一个方法  伪装成一个 属性,在代码的级别上没有本质的提升,但是让其看起来跟合理.
    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,复用性.
  • 相关阅读:
    Unity 3D第三人称视角、用途广泛限定角度(视角不能360度翻转)
    Android Studio安卓导出aar包与Unity 3D交互
    Unity 3D调用Windows打开、保存窗口、文件浏览器
    安卓与Unity交互之-Android Studio创建Module库模块教程
    Unity 3D与Android Studio安卓交互之-导出jar包
    C#字符串string以及相关内置函数
    Unity 3D委托entrust
    数据结构与算法学习一
    .NET Core学习一--Powered by .NET Core on Kubernetes
    easyui.form
  • 原文地址:https://www.cnblogs.com/shuai1993/p/9378348.html
Copyright © 2011-2022 走看看