1.面向过程 vs 函数式编程
函数式编程的优点:减少代码,可读性高
2.函数式编程 vs 面向对象
面向对象的优点:
2.上帝思维
3.面向对象:
类:对一些事物的统称和概括
对象:实实在在存在的东西,具有特征和功能
面向对象结构
class -- def 都是关键字
def 函数名():
函数体
class 类名:
静态属性(类变量,静态字段)
方法(类的方法,动态属性,动态字段)
class People:
mind = "有思想" # 静态属性
def eat(self): # 方法
print("eat")
def work(self): # 方法
print("work")
类角度操作类
class People:
mind = "有思想" # 静态属性
def eat(self): # 方法
print("eat")
查看类下所有的内容
print(People.__dict__)
万能的点 查看单个的属性或方法
增:
People.emotion = "有情感"
print(People.__dict__)
删:
del People.mind
print(People.__dict__)
改:
people.mind = "无脑"
print(People.__dict__)
查:
print(People.mind) # 单独查看一个
People.eat(1)
一般情况下不使用类名去操作方法(类方法除外)
对象角度操作类
# class People:
#
# mind = "有思想" # 静态属性
#
# def eat(self): # 方法
# print("eat")
#
# def work(self):
# print("work")
创建对象 -- 类名()
p = People() # 实例化一个对象
print(p.__dict__) # 查看对象空间 此时对象空间什么也没有
print(p.mind) # 查看静态属性mind
实例化对象时做了三件事:
1.实例化一个对象,给对象开辟空间
2.自动执行init方法
3.自动将对象的地址传递给了self(隐形传参)
class People:
mind = "有思想" # 静态属性
def __init__(self): # 初始化函数
print(111)
# print(self)
def eat(self): # 方法
print("eat")
def work(self):
print("work")
p = People() # 实例化一个对象
类外部给对象创建属性:
p.mind = "无脑"
print(People.__dict__)
print(p.__dict__)
对象只能使用类中的属性和方法,不能进行修改
class People:
mind = "有思想" # 静态属性
def __init__(self,name,age,sex): # 初始化函数
self.name = name
self.age = age
self.sex = sex
def eat(self): # 方法
print(f"{self.name}eat")
def work(self):
print("work")
p1 = People("老大",22,"男") # 实例化一个对象
p2 = People("小智",22,"男") # 实例化一个对象
p3 = People("beauty","22","女") # 实例化一个对象
print(p1.__dict__)
print(p2.__dict__)
print(p3.__dict__)
p2.eat()
什么是self
self其实就是类中方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self。所以咱们把类中的方法的第一个参数约定俗称设置成self,代表整个就是个对象,这个self可以进行改变但是不建议大家修改