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

一.属性

定义:将一个方法  伪装成一个 属性,在代码的级别上没有本质的提升,但是让其看起来跟合理.
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,复用性.

 

posted @ 2018-07-27 16:29  shuai1993  阅读(126)  评论(0编辑  收藏  举报