面向对象编程

万物皆对象。

对象是具体事物,拥有属性和行为,是把很多事物封装在一起的。

Python是一门特别彻底面向对象(OOP)编码的语言。

面向对象和面向过程:

两者都是解决问题的一种思路;

面向对象:在解决问题的时候,关注的是绝句问题所需要的对象

面向过程:在解决问题的时候,关注的是解决问题的每一个过程(步骤)

面向对象本质是对面向过程的封装。

类的作用:根据抽象的类,生产出具体的对象
Python类里面分为两个类:经典类和新式类

python面向什么 python中的面向对象详解_类属性

python面向什么 python中的面向对象详解_python_02


查看一个对象有哪些属性:对象.dict

#定义一个类
class Person:
	pass
#实例化一个对象
p = Person()
p.age = 18 #给p对象增加一个属性
print(p.age)# 18
print(p.__dict__)#{"age":18}#输出该对象下的所有属性(字典形式)

![对象中的属性存放位置

python面向什么 python中的面向对象详解_类方法_03

万物皆对象,类也是一个对象。
类属性和对象属性的操作(增删改查)

python面向什么 python中的面向对象详解_类属性_04


查看一个类下的所有属性:类名.dict

类属性是被各个对象共享的

对象属性p = Person(); p.age 会先去访问对象属性,如果对象属性里面没有,再去找Person类的类属性,如果两个都没有会报错属性错误。

如何限制一个类中的属性不能被对象随便添加(为保证一个类生产的对象都是基本标准的):可以在类中限制一个类属性 __slots。

类方法和函数都是为了描述一系列的动作,而两者最大的差别在于调用方式不同,类方法是采用对象.类方法名称() 调用,而函数直接通过函数名称调用。

python面向什么 python中的面向对象详解_python面向什么_05

def eat():
    print( "这是一个普通函数" )

class Person:
    def eat2(self): #实例方法
        print("这是一个实例方法:", self)#self就是一个实例对象的数据类型:<__main__.Person object at 0x0000022A22A60520>

    @classmethod
    def leifangfa(cls):#类方法
        print( "这个一个类方法:", cls )#cls是一个类方法的数据类型:<class '__main__.Person'>

    @staticmethod
    def jingtaifangfa():#静态方法
        print( "这是一个静态方法" )

p = Person()
p.eat2()
p.leifangfa()
p.jingtaifangfa()

self、cls 是代表方法的第一个参数要接收的数据类型。

python面向什么 python中的面向对象详解_python面向什么_06

class Person:
	def eat()

装饰器的作用:在保证原本函数不改变的前提下,直接给这个函数增加一些功能

实例方法可以访问实例参数和类参数,类方法和静态方法只能访问类变量。