码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-27 20:54:44      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:调用   图片   nbsp   查看   改变   类方法   class   count   __init__   

一. 属性

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

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 装饰静态方法

  好处:

    代码块清晰

    提高复用性

 

  

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

标签:调用   图片   nbsp   查看   改变   类方法   class   count   __init__   

原文地址:https://www.cnblogs.com/dong-/p/9379129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!