8 面向对象基础(一)
程序员文章站
2022-06-06 21:26:55
...
8.1面向对象编程介绍
- 面向对象(object-oriented ;简称: OO)
- 面向对象编程(Object Oriented Programming-OOP)
- 面向过程
8.2 类和对象
8.3 定义类
8.4 创建对象
class Dog(object): # 定义一个Dog类
def eat(self): # 定义一个eat方法
print("---吃---")
def drink(self): # 定义一个drink方法
print("---喝---")
wang_cai = Dog() # 创建一个对象,创建一个实例
wang_cai.eat()
wang_cai.drink()
# wang_cai.say()
xiao_tian = Dog()
xiao_tian.eat()
xiao_tian.drink()
8.5 添加和获取对象的属性
class Dog(object):
def eat(self):
print("---吃---")
def drink(self):
print("---喝---")
wang_cai = Dog()
wang_cai.name = "旺财" # 给wang_cai这个对象添加一个name属性
wang_cai.age = 10
print(wang_cai.name)
print(wang_cai.age)
# wang_cai.eat()
xiao_tian = Dog()
xiao_tian.name = "哮天"
xiao_tian.age = 12
print(xiao_tian.name)
8.6 self
"""
给对象添加属性:
wang_cai.name = "旺财"
对象名.属性名 = 值
获取对象的属性:
对象名.属性名
wang_cai.say() # 在调用这个say方法的时候,python解释器帮我们传递了前面这个对象作为实参被self接收了,所以谁在调用,self就是谁
"""
class Dog(object):
def eat(self):
print("---吃---")
def drink(self):
print("---喝---")
def say(self):
print("我的名字叫%s" % self.name)
wang_cai = Dog()
wang_cai.name = "旺财" # 给wang_cai这个对象添加一个name属性
wang_cai.say() # 在调用这个say方法的时候,python解释器帮我们传递了前面这个对象作为实参被self接收了,所以谁在调用,self就是谁
xiao_tian = Dog()
xiao_tian.name = "哮天"
xiao_tian.say()
8.7 init()方法
"""
wang_cai = Dog("旺财", 10)
到底做了哪些事情:
1、创建一个对象
2、创建对象成功之后,自动调用__init__()方法
3、让wang_cai去指向这个创建出来的对象
"""
class Dog(object):
def __init__(self, aaa, bbb):
"""
初始化方法
在创建对象之后,把一些属性先设置好
"""
self.name = aaa
self.age = bbb
def eat(self):
print("---吃---")
def drink(self):
print("---喝---")
wang_cai = Dog("旺财", 10) # 创建对象(实例)
# wang_cai.name = "旺财"
# print(wang_cai.name)
# print(wang_cai.age)
#
#
# xiao_tian = Dog("哮天", 12)
# print(xiao_tian.name)
# print(xiao_tian.age)
8.8__str__()方法
"""
wang_cai = Dog("旺财", 10)
到底做了哪些事情:
1、创建一个对象
2、创建对象成功之后,自动调用__init__()方法
3、让wang_cai去指向这个创建出来的对象
"""
class Dog(object):
def __init__(self, aaa, bbb):
"""
初始化方法
在创建对象之后,把一些属性先设置好
"""
self.name = aaa
self.age = bbb
def __str__(self):
"""
美化直接打印对象名的结果(直接打印对象名得到的是一个地址)
1、这个方法里面一定要有return
2、return 返回值一定是字符串
直接打印打印对象名的时候就不再是地址了,而是return后面的这个字符串
所以直接打印对象名的时候,就会来执行这里的代码
"""
return "我叫%s,今年%s岁了" % (self.name, self.age)
def eat(self):
print("---吃---")
def drink(self):
print("---喝---")
wang_cai = Dog("旺财", 10) # 创建对象(实例)
print(wang_cai)
8.9 del()方法
-
创建对象后,python解释器默认调用__init__()方法;
-
当删除对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法
-
当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
-
当使用del() 删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。
8.10 应用:烤地瓜
"""
烤地瓜:
示例属性如下:
cookedLevel : 这是数字;0~3表示还是生的,超过3表示半生不熟,超过5表示已经烤好了,超过8表示已经烤成木炭了!我们的地瓜开始时时生的
cookedString : 这是字符串;描述地瓜的生熟程度
condiments : 这是地瓜的配料列表,比如番茄酱、芥末酱等
示例方法如下:
cook() : 把地瓜烤一段时间
addCondiments() : 给地瓜添加配料
__init__() : 设置默认的属性
__str__() : 让print的结果看起来更好一些
"""
class Yam(object):
def __init__(self):
# 定义一个属性,来描述生熟程度
self.string = "生的"
# 定义一个属性,记录地瓜被烤的总时长
self.all_time = 0
# 定义一个列表,来存放这些配料
self.condiments = []
def __str__(self):
return "这个地瓜%s, 已经添加的配料有:%s" % (self.string, self.condiments)
def cooked(self, time):
self.all_time = self.all_time + time
if 0 <= self.all_time <= 3:
# 还是生的
self.string = "生的"
elif 3 < self.all_time <= 5:
# 半生不熟
self.string = "半生不熟"
elif 5 < self.all_time <= 8:
# 已经烤好了
self.string = "烤好了"
else:
# 烤成木炭了
self.string = "烤成木炭"
def add_sth(self, name):
self.condiments.append(name)
yam = Yam()
print(yam)
yam.cooked(4)
print(yam)
yam.cooked(2)
print(yam)
#
yam.add_sth("辣椒酱")
yam.add_sth("孜然")
yam.add_sth("番茄")
print(yam)
上一篇: 10 面向对象基础(三)
下一篇: 《疯狂Java讲义》学习笔记(八)泛型