面向对象编程
万物皆对象。
对象是具体事物,拥有属性和行为,是把很多事物封装在一起的。
Python是一门特别彻底面向对象(OOP)编码的语言。
面向对象和面向过程:
两者都是解决问题的一种思路;
面向对象:在解决问题的时候,关注的是绝句问题所需要的对象
面向过程:在解决问题的时候,关注的是解决问题的每一个过程(步骤)
面向对象本质是对面向过程的封装。
类的作用:根据抽象的类,生产出具体的对象
Python类里面分为两个类:经典类和新式类
查看一个对象有哪些属性:对象.dict
#定义一个类
class Person:
pass
#实例化一个对象
p = Person()
p.age = 18 #给p对象增加一个属性
print(p.age)# 18
print(p.__dict__)#{"age":18}#输出该对象下的所有属性(字典形式)
![对象中的属性存放位置
万物皆对象,类也是一个对象。
类属性和对象属性的操作(增删改查)
查看一个类下的所有属性:类名.dict
类属性是被各个对象共享的
对象属性p = Person(); p.age 会先去访问对象属性,如果对象属性里面没有,再去找Person类的类属性,如果两个都没有会报错属性错误。
如何限制一个类中的属性不能被对象随便添加(为保证一个类生产的对象都是基本标准的):可以在类中限制一个类属性 __slots。
类方法和函数都是为了描述一系列的动作,而两者最大的差别在于调用方式不同,类方法是采用对象.类方法名称() 调用,而函数直接通过函数名称调用。
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 是代表方法的第一个参数要接收的数据类型。
class Person:
def eat()
装饰器的作用:在保证原本函数不改变的前提下,直接给这个函数增加一些功能
实例方法可以访问实例参数和类参数,类方法和静态方法只能访问类变量。