面向对象编程
什么是对象
对象是指现实中的物体或实体
什么是面向对象
把一切看成对象(实例)用各种对象之间的关系来描述事务
对象都有什么特征
对象有很多属性(名词,形容词)
姓名,年龄,性别
对象有很多行为,(动作,动词)
学习,吃饭,睡觉,踢球
什么是类
拥有相同属性和行为的对象分为一组即为一个类
类是用来描述对象的工具,用类可以创建此类的对象(实例)
类的创建语句 class语句
语法:
class 类名(继承列表)
'''类的文档字符串'''
实例方法
类变量
类方法(@classmethod)
静态方法(@staticmethod)
作用;
创建一个类
用于描述此对象的行为和属性
类用类创建此类的一个或多个对象
说明;
类名必须是标识符
类名实质是变量,它在创建类时绑定一个类
构建函数
调用表达式
类名([创建传参列表])
作用;
创建这个类的实例对象,并返回此实例对象的引用关系
说明:
实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)
# constructor.py class Dog: '''此语句用来定义一个新的类型 Dog''' pass dog1 = Dog() # 创建一个实例对象 print(id(dog1)) dog2 = Dog() # 创建 第二个实例对象 print(id(dog2)) lst1 = list() # 创建一个列表对象 print(id(lst1)) lst2 = list() # 创建第二个实例对象 print(id(lst2))
实例方法:(instance method)
定义语法:
class 类名(继承列表)
def 实例方法名(self,形参列表)
'''方法的文档字符串'''
语句快
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
1.实例方法的实质是函数,是定义在类内的函数
2,实例方法至少有一个形参,第一个形参绑定调用这个方法的实例,
一般命名为'self'
实例方法的调用语法;
实例.实例方法名(调用实参)
或
类名.实例方法名(实例,调用实参)
# instance_method.py # 此示例用于示意为Dog类添加吃,睡,玩等实例方法,以实现Dog对象的相应行为 class Dog: """这是一种可爱的小动物""" def eat(self, food): '''此方法用来描述小狗吃的行为 ''' print("id为%d的"%id(self),end='') print("小狗正在吃", food) def sleep(self, hour): print("id为%d的小狗睡了%d小时" % (id(self), hour)) def play(self, obj): print("id为%d的小狗正在玩%s" % (id(self), obj)) # return 10 方法内可以用return返回一个引用 dog1 = Dog() dog1.eat("骨头") dog2 = Dog() # 创建另一个对象 dog2.eat("狗粮") dog1.sleep(1) dog2.sleep(2) dog1.play("球") dog2.play("飞盘") Dog.play(dog2, "飞盘") # 借助类来调用方法
实例属性:instance attribute
每个实例都可以有自己的变量,称为实例变量(也叫属性)
示意语法:
实例.属性名
赋值规则:
首次赋值则创建此属性
再次赋值则改变此属性的绑定关系
作用:
记录每个对象自身的数据
# instance_attribute.py # 此示例示意创建和使用实例属性 class Dog: """这是一种小动物""" def eat(self, food): '狗吃东西的行为' print(self.color, '的', self.kinds, '正在吃', food) # 以下让当前的小狗自己记住吃的是什么 self.last_food = food def show_info(self): """显示信息""" print(self.color, "的", self.kinds, '上次吃的是:', self.last_food) dog1 = Dog() dog1.kinds = "哈士奇" # 创建属性 dog1.color = "黑白相间" # 创建 属性color dog1.color = "白色" # 修改属性color print(dog1.color, "的", dog1.kinds) dog1.eat("骨头") # 白色的.... dog2 = Dog() dog2.color = "棕色" dog2.kinds = "藏獒" dog2.eat("狗粮") dog1.show_info() dog2.show_info()
练习:
定义一个人类
class Human:
def set_info(self,name,age,address='不详'):
'''此方法用来给人对象添加'姓名’,‘年龄’,和家庭地址‘属性'''
self.name=name
self.age=age
self.address=address
def show_info(self):
'''显示此人的信息'''
print('name:','age:','address:')
s1=Human()
s1.set_info('小张',20,'深圳市南山区')
s2=Human()
s2.set_info('小李',18)
s1.show_info()
s2.show_info()
del 语句用于删除实例属性
语法;
del 对象.实例变量
del 语句小结:
1)删除变量
del a,b,c
2)删除列表中的元素
del l[0]
3)删除字典的键值对
del d['score']
4)删除对象的属性(不能删除方法)
del obj.attr
初始化方法‘
作用
对新创建的对象添加属性
格式:
class 类名(继承列表)
def __init__(self,形参列表)
语句块
说明:
1.初始化方法必须为'__init__’不可改变
2)初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入'__init__'方法
3. 构造函数的实参将通过__init__方法的形参列表传入到'__init__'方法中
4. 初始化方法必须返回None
# init_method.py # 此示例示意初始化方法的定义及自动调用 class Car: def __init__(self, c, b, m): self.color = c # 颜色 self.brand = b # 品牌 self.model = m # 型号 print("初始化方法被调用") def run(self, speed): print(self.color, '的', self.brand, self.model, "正在以", speed, '公里/小时的速度行驶') a4 = Car("红色", '奥迪', 'A4') a4.run(199) t1 = Car("蓝色", "TESLA", "Model S") t1.run(230)
练习:
写一个学生类,student类,此类用于描述学生信息
学生信息有:
姓名,年龄,成绩(默认为0)
1)为该类添加初始化方法,实现在创建对象时字典设置姓名,年龄,成绩
属性,
2)添加set_score方法,能对对象修改成绩信息
3)添加show_info方法打印学生信息
class student:
def __init__(self,name,age,score):
self.name=name
self.age=age
self.score=score
def set_score(self,score):
self.score=score
def show_info(self):
print(self.name,self.age,self.score)
l=[]
l.append(student('小张',20,100))
l.append(student('小李',18))
l.append(student('小赵',19,85))
for s in l:
s.show_info()
l[1].set_score(70)
print(self.name,self.age,self.score)
析构方法“
class 类名(继承列表)
def __del__(self))
...
作用:
在对象销毁前释放对象占用的资源
说明;
析构方法会在对象销毁前被自动调用
python 语言建议不要在对象销毁时任何市区,因为销毁时间难以确定
示例;del_method.py
预置实例属性(实例变量)
__dict__属性
此属性绑定一个存储此示例自身变量的字典
示例:
clas dog:
pass
dog1=dog()
print(dog1.__dict__)
__class__属性
__class__属性绑定创建此实例的类
作用”
可以借助于此属性来访问创建此实例的类
示例:
class dog:
dog=dog()
print(dog1.__class__)
用于类的函数:
isinstance(obj,class_or_tuple)返回对象obj是否是某个类的对象或某些类的一个类的对象,如果是返回
true,否则返回false
type(obj) 返回对象的类型(类)
示例:
示例:
isinstance(100, int) # True
isinstance(3.14, int) # False
class Dog:
pass
dog1 = Dog()
isinstance(dog1, Dog) # True
type(dog1) is Dog # True