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)
posted @ 2023-01-23 18:01  李好秀  阅读(10)  评论(0编辑  收藏  举报