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

一. 属性

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

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__)

二. 类方法

  类方法:通过类名调用的方法,类方法中第一个参数约定俗成为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 装饰静态方法

  好处:

    代码块清晰

    提高复用性

 

  

猜你喜欢

转载自www.cnblogs.com/dong-/p/9379129.html
今日推荐