今日复习
一、在程序中:
1)先定义类【相同的特征:变量】【相同的技能:函数】的结合体,即类体中最常见的就是变量与函数的定义,但其实类体中是可以存在任意python代码的。
class OldboyStudent:
school = ' oldboy ' =>特征
def choose_cousre(self): => 技能
2)类体代码会在类定义阶段立即执行,会产生一个类的名称空间,用来将类体代码执行过程中产生的名字都丢进去,查看类的名称空间: print ( OldboyStudent._ _dic_ _ )
3)查看类属性: print ( OldboyStudent.school ) # OldboyStudent._ _dic _ _[ ' school ' ]
4 ) 修改类属性 : OldboyStudent.school = ‘ abc ' # OldboyStudent._ _dic _ _[ ' school ' ] = ‘ abc '
5) 新增类属性: OldboyStudent.country = ‘ usa' # OldboyStudent._ _dic _ _[ ' country ' ] = ‘ usa '
6) 删除类属性: del OldboyStudent.country
结论:定义一个类本质上是开辟了一个类的名称空间或者说是一个存放变量与函数的容器,往这个空间丢数据,作用如下:
1. 用点语法从容器中取出数据来使用。【OldboyStudent.choose_cousre(123) #调用类中函数】
2. 加括号调用类,产生对象
2)调用类的过程称为实例化,返回的结果称之为类的一个对象或一个实例,实例:实际存在的一个例子
3)调用类发生了什么:产生了对应的空的对象名称空间,每一个对象名称空间中都有一个 _ _class_ _ 指向类的名称空间: # stu1. _ _class_ _
stu1 = OldboyStudent() # stu1._ _dic_ _
stu2 = OldboyStudent() # stu2._ _dic_ _
stu3 = OldboyStudent() # stu2._ _dic_ _
4)对象名称空间存放自己的属性,
stu1.name = ' fanny '
stu1.age = 16
stu1. gender = female
======================
stu1.name = ' tom '
stu1.age = 20
stu1. gender = male
问题:以上对象重复代码,需简化
今日内容:
-- 为对象简化重复代码方案一:将重复内容定义到一个函数内
def init(obj, x, y, z): def init(obj, name, age,gender):
obj.name = x ===> obj.name = name
obj.age = y obj.name = age
obj.gender = z obj.name = gender
对象调用:
init(stu1, ' fanny ', 16,' female ' )
init(stu1,' tom ', 20,' male ' )
===============================================
-- 简化重复代码方案二: 【可不可以让python 自动调 init函数?】 ==> 可以用下划线开头和下划线结尾就可以自动触发且必须是_ _init _ _ 将函数放入类内部
class OldboyStudent:
school = ' oldboy '
def choose_cousre(self): pass
def _ _ init_ _(self, name, age, gender):
self.name = name
self. age = age
self. gender = gender
一、类属性、对象属性:属性【变量属性&函数属性:attribute】