1、前言
面向对象编程(OOP),具有三大特性封装,继承,多态。
2、相关概念解释
(1)类
具有相同属性和方法的对象的抽象为类,属性用于描述对象的状态,方法用于对象的具体动作
(2)对象
类的具体化就是一个对象,对象可以表示为具体的事物或者可以为抽象的事件。
(3)消息
对象之间通信的结果成为消息
(4)方法
类中操作的实现成为方法
3、类的创建和对象的实例
(1)新建Student类
class Student():
def __init__(self,name1,age1): #构造方法
self.name = name1
self.age = age1
def show(self): #显示学生信息
print("学生姓名:"+self.name+" 年龄:"+str(self.age))
1、 __init__()为构造方法,当实例化最先调用该方法,用于初始化对象的属性
2、show()为自定义的方法,用于显示学生的信息
(2)实例化对象
tom = Student('tom',18)
对象 = 类名(属性值)
(3)访问属性
tom.show() #通过调用方法显示属性
print(tom.name) #直接访问属性
print(tom.age)
print(hasattr(tom,'name')) #用于判断对象中是否存在name属性
print(getattr(tom,'name')) #用于获取对象中该属性的值
(4)类中的内置方法
1、 __str__(self) :该方法常用于在类中实现,返回一个字符串,显示格式化结果
class Student():
def __init__(self,name1,age1):
self.name = name1
self.age = age1
def __str__(self):
return "学生姓名:%s 年龄:%d " %(self.name,self.age)
tom = Student('tom',18)
print(tom.__str__())
2、类的各项属性
class Student(object):
'学生类'
def __init__(self,name1,age1):
self.name = name1
self.age = age1
def show(self):
print("学生姓名:"+self.name+" 年龄:"+str(self.age))
def __str__(self):
return "学生姓名:%s 年龄:%d " %(self.name,self.age)
print("该类文档:"+Student.__doc__)
print("该类名称"+Student.__name__)
print(Student.__bases__)
__doc__ :获得该类的文档
__name__ :获得该类的类名
__bases__:获得组成该类的父类,返回的结果为一个元组
(5)类的继承
class 派生类(父类,父类...):
可以满足单继承和多继承
class Father():
def __init__(self):
self.name = 'father'
def FatherSay(self):
print("i am " + self.name)
class Child(Father):
def __init__(self):
self.name = 'Child'
def ChildSay(self):
print("i am " + self.name)
实例化对象方法的调用
fa = Father()
ch = Child()
fa.FatherSay() #父亲调用父类方法
ch.FatherSay() #子类调用父类方法
ch.ChildSay() #子类调用子类方法
方法重写
重写的方法名需相同
class Father():
def __init__(self):
self.name = 'father'
def FatherSay(self):
print("i am " + self.name)
class Child(Father):
def __init__(self):
self.name = 'Child'
def FatherSay(self): #对父类的方法进行重写
print("i am your" + self.name)
实例化对象
fa = Father()
ch = Child()
fa.FatherSay()
ch.FatherSay()
方法重写仅改变子类的方法,对父类的方法并未影响。
4、类的属性和方法
属性:公有属性,私有属性
方法:公有方法,私有方法,静态方法,类方法
(1)属性
公有属性:self.name
私有属性:self.__age (在属性前添加两个下划线)
(2)方法
公有方法:
def Show(self):
......
私有方法:(仅能在类中调用)
def __Count(self):
静态方法:(在定义方法前填写@staticmethod)
@staticmethod
def fun(self):
....
类方法:(在定义方法前填写@classmethod)
@classmethod
def fun(self):
....
测试:
class Student(object):
con = 0
def __init__(self,name1,age1):
self.name = name1
self.__age = age1
Student.con += 1
def show(self):
print("学生姓名:"+self.name+" 年龄:"+str(self.__age))
@classmethod
def GetInfo(self):
print("学生总人数 %d"%(self.con))
tom = Student('tom',19)
harry = Student('harry',15)
tom.show()
harry.show()
Student.GetInfo()