面向对象编程初识
目录
1. 面向对象初步认识
面向过程编程VS函数编程:减少重复代码,增强了可读性
面向对象编程VS函数编程优点:
①对相似功能的函数,同一个业务的函数进行归类、分类;
类:具有相同属性和方法的一类事物
对象:类的具体体现(具体到一个事物),对象间是不同的。
②要站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板实例化出来的,得到对象就是得到了一切。
2. 面向对象的结构
class 类名: # 类名用驼峰法,首字母大写,不可用下划线
属性、方法
obj = 类名() # 实例化对象
# example:
class Human:
mind = "有思想" # 类的属性(静态属性、静态字段)
language = "语言"
def work(self): # 动态方法
print("都会工作")
def eat(self):
print("都能吃饭")
3. 从类名的角度研究类
3.1 类名操作类中的属性
3.1.1 类名查看类中所有的内容
print(Human.__dict__) # 方法会显示地址
3.1.2 类名操作类中的静态属性 万能的点
# 增
Human.body = "有头" # 类名.变量名="值"
# 删
del Human.mind
# 改
Human.mind = "学习" # 类名.变量名="改的值"
# 查
print(Human.language)
3.2 类名调用类中的方法
一般类中的方法不会通过类名调用。
Human.work("参数") # 必须手动传参,不用,没有意义
# 总结
一般类名就是操作类中的属性。
4. 从对象的角度研究类
4.1 类名()
类名():实例化过程,会得到一个返回值。返回值就是对象、实例。
实例化一个对象发生了三件事:
1. 开辟一个对象空间;(和类空间不同)
2. 自动执行__init__方法,并且将对象空间的地址传给self,属于隐形传参;(此时对象空间有两个名称:self、obj)
3. 运行__init__方法内的代码,给对象空间封装属性(与类空间无关,Human.__dict__无法显示对象中封装的属性。)
通过传参可以向对象内封装属性、传值。
class Human:
mind = "有思想"
language = "语言"
def __init__(self, name, age):
self.name = name
self.age = age
def work(self):
print("能够工作")
def eat(self):
print("可以吃饭")
obj = Human()
4.2 对象操作对象空间的属性
4.2.1 对象查看对象的空间所有的属性
print(obj.__dict__) # 以字典的形式
4.2.2 对象操作对象空间的属性 (外部操作)
class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print("能够工作")
def eat(self):
print("可以吃饭")
obj = Human("meet",30)
# 增
obj.sex = "男"
# 删
del obj.name
# 改
obj.age = 18
# 查
print(obj.age)
4.2.3 对象查看类中的属性
只能查看,不能修改类中的属性,否则只会增加到对象中的属性。对于可变数据类型,如列表,对象或类名都可以给列表内的元素进行增删改(地址不变)。
print(obj.mind)
4.2.4 对象调用类中的方法
class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print(f"{self.name}今年{self.age}岁,能够工作")
def eat(self):
print(f"{self.name}今年{self.age}岁,可以吃饭")
obj = Human("meet",30)
obj.work()
obj.eat()
self:本身来说就是类中的方法的第一个参数,会自动接收对象的内存地址。
5. 一个类可以实例化多个对象
class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print(f"{self.name}今年{self.age}岁,能够工作")
def eat(self):
print(f"{self.name}今年{self.age}岁,可以吃饭")
obj = Human("meet",30)
obj.work()
obj.eat()
obj1 = Human("alex",18)
obj1.work()
obj1.eat()
obj2 = Human("dsb0",20)
obj2.work()
obj2.eat()