类与对象的概念
面向对象的两个最重要的概念:类和对象
类: 共性事物的抽象,是对某一个类具有共性事物的描述,是
概念上的定义。比如,老师类,学生类
对象:对象是共性事物的一个体现,是这类事物的每个个体,
或者说是类的一个实例(instance),比如:张雪老师,李四老师,这都是具体的对象。
总结:类是对象的模板,对象是类的实例
类的结构:里面包含属性和函数
属性是对象的状态,属性也叫成员变量(属性)
方法是对象的行为,方法也叫函数,重点关注函数即可。
举例:李四老师,他的属性有:姓名,年龄,身高,职业等
他的功能有:会教书,会吃饭,会打字,会跑步等。简单来说,属性是静态的,行为是动态的。行为通过函数体现出来。
代码演示
定义一个类:Teacher类
image.png(1)不带外部参数的类函数
类函数必须要加关键字self
Teacher.p代码如下:
# -- coding: utf-8 --
class Teacher:
#定义属性
name="李思思"
age=28
sex="femal"
address="SH"
#定义不传入外部参数的函数
def teaching(self):#类内部创建的函数必须要加关键字self,这个self就是对象自己
print('老师在上课')
def seeBook(self):
print("老师在看书")
#函数调用
teacher=Teacher()#创建一个对象实例:语法:类名()
teacher.teaching()#调用类函数:语法:对象.函数名()
teacher.seeBook()#调用类函数:
上面代码执行结果:
image.png
(2)类函数中访问类属性
语法:self.属性
Teacher.p代码如下:
# -- coding: utf-8 --
class Teacher:
#定义属性
name="李思思"
age=28
sex="femal"
address="SH"
#定义不传入外部参数的函数
def teaching(self):#类内部创建的函数必须要加关键字self,这个self就是对象自己
print(self.name+ "is teaching")#self.name 可以看成 对象.属性
def getInfo(self):
print(self.name+"老师今年"+str(self.age)+"岁了")#这里年龄转成str,因为加号拼接必须是相同的数据类型
#函数调用
teacher=Teacher()#创建一个对象实例:语法:类名()
teacher.teaching()#调用类函数:语法:对象.函数名()
teacher.getInfo()#调用类函数:
sex=teacher.sex#调用类属性
print(sex)
代码执行结果如下:
image.png
注意:
1.在类里面定义的函数,必须要带一个self参数,pycharm会自动帮你加上self
2.python中定义的类名可以和文件名不一致或者一致,java中文件名必须要和public类名一致。我这里为了方便,定义的是一致的。
3.类函数中获取类属性:self.属性 (当然使用创建的teacher对像也可以)
4.调用类里面定义的函数:1.创建对象 2.对象.函数()
5.什么是类里面的函数:类冒号里面缩进定义的函数就是类函数
6.虽然类里面可以使用self关键字,访问属性,函数,但是这不是意味着不需要创建对象了,函数调用时必须要创建对象。
7.函数调用:创建对象的语句与定于类的语句时同级的,不是缩进关系。
8.外部函数不能直接访问类里面定义的属性--->类属性只能通过对象去调用,所以外部函数想使用类属性,需要通过对象获取。
(3)类函数中调用类函数
image.png注意:1.两个类函数不能相互调用。---》会进入死循环
2.函数内部的调用-》即类函数调用类函数:self.函数(),当然使用创建的teacher.函数()也可以
(4)带外部参数的类函数
a:带参数
Teacher.py代码如下:
class Teacher:
#定义属性
name="李思思"
#定义不传入外部参数的函数
def teaching(self,name):#
print(name+'老师在上课')
def seeBook(self):
# teacher.teaching()#这样写也是可可以的
print("老师在看书")
#函数调用
teacher=Teacher()#创建一个对象实例:语法:类名()
teacher.teaching("kk")#调用类函数:语法:对象.函数名()
代码执行结果如下:
image.png注意:1.类函数不管有没有加外部参数,self必须要有
2.函数调用:必须传如参数和函数中的外部参数个数要一致(如果有默认参数值,则不会报错)
b.带默认参数
如下图,如果有默认参数值,不传这个参数,代码执行不会报错
image.png初始化函数也叫构造函数
初始化函数
我们知道类有属性和函数。那么在定义一个类的时候,是不是可以不用是西安创建属性呢?---》答案是肯定的。我们可以在初始化函数里面定义属性。
Teacher.py代码如下:
# -- coding: utf-8 --
class Teacher:
#定义一个初始化函数,创造实例的时侯,传递参数过来
def __init__(self,age,sex):#类函数必须要加self参数
#初始化函数定义三个属性:name,age,sex
self.name="求斯"#初始化函数里面写死一个属性值
self.age=age
self.sex=sex
def teaching(self):
print(self.name+'老师在上课')#访问初始化里面定义的属性(或变量):self.name
#print(name+'老师在上课')这句代码,name会有红色下滑线,因为teaching(self)函数没有传入外部参数,默认要获取初始化name属性,而访问初始化中的属性是:self.name
def seeBook(self,name):
print("一个"+self.age+"岁的老师在看书"+",老师的名字是"+name)#这里name不会有红色报错,因为seeBook(self,name)传入name
#函数调用
teacher=Teacher("28","女")#创建一个对象实例:同时必须要传入age,sex
teacher.teaching()#这里不需要传入参数,因为定义的teaching()函数没有引用外部参数
teacher.seeBook("kk")#传入name.不使用初始化中的name
代码执行结果:
image.png image.png注意:
1.初始化函数init()不是自己命名的。是python自带的一个函数,我们在使用的时候,可以传递参数,如上面的age,name,sex,创造实例时传入age,name,sex的值,顺序要一致,否则会报错
2.初始化函数也可以有默认参数值,如果初始化函数有默认参数值,那么创建实例时就可以不用传这个默认参数值。如果传了,就使用传入的值
3.位置参数必须要在默认参数之前
4.初始化函数和普通定义的函数有何不同:
初始化函数名必须是init()
5.要想使用初始化中的变量,就使用self.变量,如果不想使用初始化中的变量,那么就可以外部参数传入
如下图:
网友评论