版权声明:转载请声明 https://blog.csdn.net/dirckes8813/article/details/83417119
面向对象编程 Object Oriented Programming
两种编程思想:
- 面向过程编程
- 面向过程思想:
- 最小单位:函数 function
- 面向对象编程:
- 最小单位:类 class
什么是对象?
- 对象是指现实中的物体或者实体
什么是面向对象?
- 把一切看成对象(实例) 用各种对象之间的关系描述事物
对象都有什么特征?
- 对象有很多属性(名词、形容词)
- 对象有很多行为(动作,动词)
什么是类?
- 拥有相同属性和行为的对象分为一组
- 类是用来描述对象的工具
类的创建语句:
- 语法:
- class 类名(继承列表):
- ‘’‘ 类的文档字符串’‘’
- 实例方法(类的函数mothod)定义类的变量
- 类方法(@classmethod)
- 静态方法(@ststicmethod)
- 作用:
- 创建一个类
- 类用于描述对象属性和行为
- 类用于创建此类的一个或者多个对象
- 说明:
- 类名必须是标示符
- 类名实质是一个变量
- class 类名(继承列表):
示例1:
class Dog:
def eat(self,food):
print('小狗正在吃',food)
dog1 = Dog()
dog1.eat('骨头')
实例方法(instance merhod)
-
定义格式:
- class 类名(继承列表):
- def 示例方法名(self。参数1,参数2。。。)
- 语句块
- def 示例方法名(self。参数1,参数2。。。)
- 作用:
- 用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
- 说明:
- 实例方法的实质是函数,定义在内类的函数
- 实例方法至少有一个形参,第一个形参代表调用这个方法的实例,一般命名为’self’
实例方法的调用语法:
实例.实例方法名(调用传参):
或
类名.实例方法名(实例,调用传参) - class 类名(继承列表):
示例2:
class Dog:
def eat(self,food):
print('小狗正在吃',food)
def sleep(self,hour):
print('吃完了要睡',hour,'小时')
dog1 = Dog()
dog1.eat('骨头')
dog1.sleep('3')
dog2 = Dog()
dog2.sleep('5')
实例属性:(attribute 实例变量)
- 每个实例都可以用自己的变量来记录每个对象自己的数据,把这个变量称为实例变量
- 使用语法:
- 实例.属性名
- 赋值规则:
- 首次属性赋值择创建此属性
- 再次赋值择改变此属性的绑定关系
- 作用:
- 记录每个对象自身的数据
示例3:
class human:
def set_info(self,name,age,address='不详'):
self.name = name
self.age = age
self.address =address
def show_info(self):
print(self.name,'今年',self.age,'岁','家住',self.address)
s1 = human()
s1.set_info('小张',20,'北京市东城区')
s2 = human()
s2.set_info('小李','18')
s1.show_info()
s2.show_info()
删除属性:
- del 对象.实例变量名
del语句总结:
- 1)删除变量
- 2)删除列表中的元素
- 3)删除字典中的键
- 4)删除属性
初始化方法
- 作用:
- 对象创建的对象添加属性
- 语法格式:
- class 类名
- def__init__(self[,形参列表])
- 语句块
- def__init__(self[,形参列表])
- 说明:
- 初始化方法得名必须是‘init’不可改变
- 初始化方法会在构造函数 创建实例后自动调用且将实例自身通过飞一个参数self传入‘init’方法
- 构造函数的实参将通过__init__方法的参数列表传入到init方法中
- 初始化方法内如果需要return语句返回择只能返回none
- class 类名
示例4:
class student:
def __init__(self,name,age,sorce=0):
self.name = name
self.age = age
self.sorce = sorce
def set_sorce(self,sorce):
if 0 <= sorce <= 100:
self.sorce = sorce
else:
print('不在范围内')
def show_info(self):
print(self.name,'今年',self.age,'岁','成绩',self.sorce)
L = []
L.append(student('小张',20,100))
L.append(student('小李',18,95))
L.append(student('小钱',20))
L[-1].set_sorce(70)
for s in L:
s.show_info()
析构方法:
- 格式:
- class 类名(继承列表)
- def del(self):
- 。。。
- def del(self):
- class 类名(继承列表)
- 作用:
- 在此对象销毁前释放次对象占用的资源
- 说明:
- 析构方法会在对象销毁时自动调用
- python 语句建议不要在对象销毁时做任何事情,因为销毁时间难以确定
示例5:
class Car:
def __init__(self, name):
self.name = name
print("汽车", name, '对象被创建')
def __del__(self):
print("汽车", self.name, '对象被销毁')
c1 = Car("BYD E6")
# del c1
# L = []
预置的实例属性
dict 属性
- __dict__属性绑定一个存储此实例自身变量的字典
示例6:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__) # {}
dog1.color = "白色"
print(dog1.__dict__) # {'color':'白色'}
__class__属性
- __class__属性绑定创建此实例的类
- 作用:
- 可以借助此属性来访问创建此实例的类
示例7:
class Dog:
pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__()
print(dog2.__class__)
用于类的函数:
- isinstance (obj,class_or_tuple)
- 返回这个对象obj是否是类的对象,或者某些类中的一个类对象
- 如果是则返回True,否则返回Flase
- type(obj) 返回对象的类
综合练习
有两个人:
1. 姓名:张三
年龄:35岁
2. 姓名:李四
年龄:8岁
行为:
1.教别人学东西 teach
2.工作赚钱 work
3.借钱 borrow
用程序描述如下事情:
张三 教 李四 学 python
李四 教 张三 学 滑冰
张三 上班 赚了 1000元钱
李四 向 张三 借了 200元钱
显示李四的全部信息
显示张三的全部信息
代码:
class Human:
def __init__(self, name, age):
self.name = name # 姓名
self.age = age # 年龄
self.money = 0 # 钱数
self.skill = [] # 技能
def teach(self, other, skl):
other.skill.append(skl) # other得到了技能
print(self.name, '正在教', other.name,
'学', skl)
def work(self, money):
self.money += money
print(self.name, '上班赚了', money, '元钱')
def borrow(self, other, money):
'''借钱成功返回True,失败返回False'''
# 先判断other有没有钱借
if other.money > money:
other.money -= money
self.money += money
print(other.name, '借给了',
self.name, money, '元钱')
return True
print(other.name, '没借给', self.name)
return False # 借钱失败
def show_info(self):
print(self.age, "岁的", self.name,
'有技能:', self.skill, ',钱包内的钱数是',
self.money)
zhang3 = Human("张三", 35)
li4 = Human('李四', 8)
zhang3.teach(li4, 'python')
li4.teach(zhang3, '滑冰')
zhang3.work(1000) # 张三 上班 赚了 1000元钱
li4.borrow(zhang3, 200) # 李四 向 张三 借了 200元钱
zhang3.show_info()
li4.show_info()