今日内容
一、面向对象编程
1.1面向对象编程介绍
'''
面向对象编程
核心是对象二字,对象就是一个用来盛放数据与功能的容器
基于该思想编程思想写程序就是创造一个个的容器
优点:扩展性强
缺点:代码的复杂度提升
'''
#不完善的面向对象编程思想
def message(msg):
print("my name is %s age is %s gandel is %s" % (msg["name"],msg["age"],msg["gandel"]))
msg1 = {
"name":"hyk",
"age":18,
"gandel":"male",
"message":message
}
msg2 = {
"name":"xxx",
"age":19,
"gandel":"male",
"message":message
}
msg1["message"](msg1)
1.2类与对象
# 定义类的过程
# 1、立刻运行类体内代码
# 2.将运行过程中产生的名字都丢到类的名称空间中
class Student: #类:对象之间的公共信息
school = "上海校区"
def __init__(self,x,y,z):
self.name = x
self.age = y
self.gender = z
def tell_info(self):
print("my name is %s age is %s gandel is %s from is %s" % (self.name,self.age,self.gender,Student.school))
#调用类的过程
#1、先创造一个空对象
#2、自动触发类内的__init__函数的运行,将空对象当做第一个参数传入
#返回一个初始化好的对象给obj1
obj1 = Student("xxx",18,"male")
obj2 = Student("yyy",19,"femal")
obj1.tell_info()
# print(obj1.__dict__)
# print(obj2.__dict__)
# print(Student.__dict__)
#属性查找
print(obj1.name)
#先从对象本身名称空间找,没有的话再从类的名称空间中找
# obj1.school = "xxx"
# print(obj1.school)
#类.属性 :从自己的名称空间找
print(Student.school)
print(Student.__init__)
#类中的数据属性是直接共享给所有对象用的
print(Student.school)
print(obj1.school)
print(obj2.school)
# 类内的数据改变会影响对象的调用,对象中的数据改变只会影响自己本身
Student.school = "XXX"
obj1.school = "yyy"
print(Student.school,id(Student.school))
print(obj1.school,id(obj1.school))
print(obj2.school,id(obj2.school))
#类中函数的调用
Student.tell_info(obj1)
obj1.tell_info() #将调用者的参数传入类中函数
1.3面向对象编程之封装
#为什么要隐藏数据:
#1、隐藏数据是为了严格控制类外部访问者对属性的操作
#2、隐藏函数属性是为了隔离复杂度,让用户只看到封装好的功能
#隐藏类的属性
#__开头的属性特点:
#1、并没有真的藏起来,只是变形的
#2、该变形只在定义阶段,扫面语法的时候执行,此后__开头的属性都不会变形
#3、该隐藏对外不对内
class People:
__country = "China" #相当于 _PeoPle__contry = ”"china"
print(People._People__country)