Day07 - 面向对象
1. 面向对象概述
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的, 面向对象方法 ,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
2. 面向对象生活举例
类: 是对现实事物的属性和行为的抽象
类不能具体的表示一个真实存在的事物.
对象: 是类的一种实例表示
是真实存在的,看得见摸得到的
3. 类与对象的关系
类(Class) 由3个部分构成
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法 (行为)
4. 类的定义格式
经典类:
class 类名:
属性
行为
新式类:
class 类名(object):
属性
行为
在 python3 以后,只有新式类
'''
设计一些类
类在python中分为旧式类(经典类)和新式类
'''
# 经典类1
class Hero:
# 定义一个方法,
def skill(self):
print('发一个大招。。。')
# 经典类2
class Person():
# 定义两个方法
def eat(self, food):
print('吃', food)
def sleep(self):
print('每天至少睡8小时')
# 新式类
class Dog(object):
def bark(self):
print('Won Won....')
5. 创建对象和使用对象的格式
对象名 = 类名(参数列表....)
对象调用方法的格式:
对象名.方法名(参数列表)
注意:
方法中参数列表中的第一个参数self,不需要手动传递,这个参数是由解释器在执行程序时,自动传递的
默认会将当前调用方法的对象引用传递进去
'''
实例 对象
'''
# 抽象一个人类
class Person(object):
# 第一个方法
def eat(self, food):
print('一个人在吃', food)
# 第二个方法
def sleep(self, t):
print('一个人睡了', t, '个小时')
# 实例对象
tom = Person()
# 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,
# 然后将这个地址引用返回给对象名
print(tom)
# 使用 对象来执行类中的方法
tom.eat('饭')
tom.eat('海鲜')
tom.sleep(8)
6. 创建多个对象
问:如果通过同一个类,创建多次对象时,多次创建的对象是否是同一个?
答:否,创建的是多个类型相同,但地址不同的多个对象
'''
实例 对象
'''
# 抽象一个人类
class Person(object):
# 第一个方法
def eat(self, food):
print('一个人在吃', food)
# 第二个方法
def sleep(self, t):
print('一个人睡了', t, '个小时')
# 实例对象
tom = Person()
jack = Person()
rose = Person()
# 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,
# 然后将这个地址引用返回给对象名
print(tom)
print(jack)
print(rose)
#
# # 使用 对象来执行类中的方法
# tom.eat('饭')
tom.eat('海鲜')
tom.sleep(8)
jack.eat('土')
jack.sleep(2)
rose.eat('满汉全席')
rose.sleep(24)
7. 动态绑定属性
在实例对象以后,为该对象添加一个属性
'''
实例 对象
'''
# 抽象一个人类
class Person(object):
# 第一个方法
def eat(self, food):
print(self.name, ' 在吃', food)
# 第二个方法
def sleep(self, t):
print(self.name, ' 睡了', t, '个小时')
# 实例对象
tom = Person()
jack = Person()
rose = Person()
# 为对象态动添加一个属性 name
tom.name = 'Tom'
# 动态为对象绑定属性时,给哪个对象绑定了属性,只能哪个对角有该 属性,其它对象是没有该 属性的
# 如果在方法中引用了该 属性,那么这时没有该 属性的对象,调用这个方法时,就会报错
jack.name = "Jack"
rose.name = 'Rose'
# 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,
# 然后将这个地址引用返回给对象名
print(tom)
print(jack)
print(rose)
#
# # 使用 对象来执行类中的方法
# tom.eat('饭')
tom.eat('海鲜')
tom.sleep(8)
jack.eat('土')
jack.sleep(2)
rose.eat('满汉全席')
rose.sleep(24)
8. init 方法
这个方法是一个魔法方法, 命名规则是前后各有两个下划线,
魔法方法是python当中,预设好的,具有特定功能的方法
一般这种方法,不需要手动调用,会自动调用执行
该方法会在创建对象的时候自动调用.
调用时,这个方法用来为对象进行初始化
'''
__init__方法
该 方法会在创建 对象时自动调用 ,
并对该 对象进行初始化操作
'''
class Cat(object):
# 实现 魔法方法 __init__ ,准备为对象初始化属性
def __init__(self, name, age):
print('Init Run ...', self)
# 绑定属性时,使用 self.属性名 = 值
self.name = name
self.age = age
def show(sealf):
print(sealf.name, sealf.age)
tom = Cat('Tom', 1)
print(tom)
# 使用属性
print(tom.name)
print(tom.age)
jack = Cat('Jack', 2)
print(jack)
print(jack.name)
print(jack.age)
# 在调用 方法时,方法的第一个参数 self 是不用手动传参的
# 这个参数会由解释 器自动将调用 该 方法的对象传递过去
tom.show() # self = tom
jack.show() # self = jack
# rose = Cat()
def show():
a = 1
print(id(a))
return a
b = show()
print(b)
print(id(b))
9. str 方法和 del 方法
__str__ 方法(重点掌握)
格式化对象
该方法返回一个字符串值
当使用 str() 做类型转换时,会自动调用 该方法
当一个自定义类,没有实现该方法时,默认打印格式是 <模块名.类名 object at 地址>
eg:<__main__.Cat object at 0x02176610>
name,age
{name:tom, age:1}
调用该方法的场景:
1. 通过 print() 函数打印时,会自动调用该方法
2. 通过 str() 函数对自定义的对象进行类型转换时,会自动调用该方法
'''
__str__() 方法
'''
class Cat(object):
def __init__(self, name, age, height):
# 将三个属性绑定给对象
self.username = name
self.age = age
self.height = height
# 默认没有实现 __str__方法,那么会打印 <模块名.类名 object at 0x...>
# 如果想按自己的格式 显示,需要在类中实现 该 方法
def __str__(self):
print('String Run ..', self.username)
# print(self.username, self.age, self.height)
# 该 函数必须 有一个返回值
# 并且这个返回值 必须 是一个字符串
# 如果需要将对象的信息按照一定的格式进行格式 化,那么可以在这里进行格式修饰 ,
# 修饰完后,可以将这个格式 化字符串返回,让str() 方法在执行时,得到该 对象转换的字符串类型
s = self.username.ljust(10) + str(self.age).center(5) + self.height.rjust(5)
return s
tom = Cat('Tom', 1, '50cm')
jack = Cat('Jack', 2, '50cm')
# print(tom.username)
# print(tom.age)
# print(tom.height)
print(tom)
print(jack)
# c_lsit = list('hello')
#
# print(c_lsit)
tom_s = str(tom)
print('|' + tom_s + '|')
__del__ 方法(了解)
该方法是用来在销毁对象时,回收释放资源使用的方法
该方法也是自动调用
当在使用 del 对象时,会调用方法
'''
__del__方法
该 方法用来在删除 对象时,回收对象占的资源
'''
class Cat(object):
def __init__(self, name):
self.name = name
def __del__(self):
# 要在这个方法中将当前对象持有的其它对象手动销毁
del self.name
print('del run ...')
tom = Cat('tom')
# 执行下面的代码 时,会自动 调用 __del__ 方法,将这个对象销毁,回收对象内存资源
# del tom
print('over')
# print(tom)
本文来自博客园,作者:李好秀,转载请注明原文链接:https://www.cnblogs.com/lehoso/p/17065348.html