python面度对象(属性,类方法,静态方法)

一. 属性

  所谓的属性,就是将一个类中的方法伪装成一个属性.在代码的级别是没有任何本质上的提升.但是让代码看起来更顺眼.

  property 装饰器函数,内置函数,帮助你将类中的方法伪装成属性(特性).

    调用方法的时候不需要主动加括号

    让程序的逻辑性更加合理

  使用方法:

    @porperty.setter 装饰器,修改被property装饰的属性的时候会调用被这个装饰器装饰过的方法,除了self之外还有一个参数:被修改的值

    @property.deleter 装饰器,当要删除被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)
p1.age = 23  #看上去更像是对某一个属性进行操作
print(p1.age)
del p1.age
print(p1.__dict__)
class Circle:
    def __init__(self,r):
        self.r = r

    @property
    def area(self):   #  这个方法计算结果本身就是一个属性,但是这个属性会随着这个类/对象的一些基础变量的变化而变化(本身是一个运算过程,但伪装成了一个属性)
        return 3.14*self.r**2

c = Circle(5)
print(c.area)
c.r = 10
print(c.area)

 

二. 类方法

  classmethod 类方法的装饰器 ,内置函数

  使用类名调用,默认传类名作为第一个参数

  不用对象命名空间中的内容,而用到了类命名空间中的变量(静态属性),或者类方法或静态方法

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

class A:
    def func(self):  # 普通方法
        print(self)

    @classmethod  # 类方法
    def func1(cls):
        print(cls)

a1 = A()
a1.func()

A.func(a1)

A.func1()

a1 = A()
a1.func1()  # 对象调用类方法,cls 得到的是类本身.

  类方法的使用场景:

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

class A:
    name = 'ale'
    count = 1

    @classmethod
    def func1(cls):  # 此方法无需对象参与
        return cls.name + str(cls.count + 1)

a1 = A()
print(a1.func1())
print(A.func1())

    2.对类中的静态变量进行改变.

    3.继承中,父类得到子类的类空间.

  也可以不通过类方法,让父类中的某个方法得到子类空间的任意值

class A:
    age = 12

    def func2(self):
        print(self)  # self 子类的对象,能得到子类 空间的任意值

class B(A):
    age = 22

b1 = B()
b1.func2()

 

三. 静态方法

  静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。可以理解为将静态方法存在此类的名称空间中。事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数

  @staticmethod 装饰静态方法  内是函数

  如果一个类里面的方法,即不需要用到self中的资源,也不用cls中的资源

  相当于一个普通的函数

  但是你由于某种原因,还要把这个方法方法放在类中,这个时候,就将这个方法变成一个静态方法

  好处:

    代码块清晰

    提高复用性

 

  

posted @ 2018-07-27 18:25  唯你如我心  阅读(284)  评论(0编辑  收藏  举报