四时宝库

程序员的知识宝库

从零开始学Python(九):面向对象-基础

面向对象的概念

编程中实现需求,两种开发的模式:

  • 面向过程:在写代码的时候,一步一步的从头到尾去执行,每一个步骤在实现的时候,都是亲力亲为。关注点在过程。
  • 面向对象:实现某一个功能的时候,执行某个操作的时候,将事务的共性提炼出来,对象,让对象去实现想要的操作,
  • 大象、鲨鱼---动物(走)
  • 衣柜、冰箱---容器(打开门、关闭

面向对象的三大特征

  • 封装:就是将具体共同特征的一类事物,封装成一个类,类中,封装一些,共同特征(属性和方法)
  • 联想、戴尔、华硕、苹果
  • 性能、CPU、内存、显卡、颜色、尺寸、价格
  • 将上述的电脑====> 电脑类
  • 数据(属性--特点):
  • 行为(方法--能做什么事情)

面向对象中有两个很重要的概念就是 类 和对象

:一类事物的统称,泛指,在程序中想要去创建一个类,使用关键字 class来进行定义

对象: 对象是通过类创建的,实实在在存在的事物。

类组成: 类名、属性(用于去描述这一类事物 名词)、方法(行为,事物做什么事情、动词)

类如何去抽取

归纳的时候,类就是一类事物的统称

人类--- (类名)

属性--- 智商 身高,体重,年龄

方法--- 走 思考 说话 吃 唱 跳 rap

01-类的定义

# 类在定义的时候 使用 class 关键字来定义
# 类名要符合标识符的命名规则,最好使用大驼峰的命名方式

# 定义一个人类
class People():
    # 定义属性和方法
    # 在类中定义方法,和前面学的函数是基本一模一样的,函数中学到的知识点在方法中是通用的
    # 其实方法的本质就是函数
    def eat(self):
        print('正在吃饭....')

    def sing(self):
        print("正在唱歌....")


# 如何去创建对象?   对象名 = 类名()
xiaoming = People()
# 如何去使用类中的方法?  对象名.方法名()
xiaoming.eat()
print(id(xiaoming))

# 根据这个类,张三对象
zs = People()
zs.eat()
print(id(zs))

print('-'* 50)
if xiaoming is zs:  # 在Python中判断两个值是否相等 使用 == ,判断两个变量(对象)的引用是否相同使用is
    print("一样的")

02-补充-类的定义

# 1. class 类名(object):
class People(object):
    pass


# 2. class 类名():
class People1():
    pass


# 3. class 类名:
class People2:
    pass


"""
括号里面写的内容,是另外一个类的名字(继承)
在Python3中,默认的情况下,所有的类都有一个共同的父类 --object 这种类叫做新式类。
了解: 在Python2中,默认是旧式类,如果在定义类的时候,加上了 object ,那也就表示新式类。
    
"""

03-添加和获取属性

# 定义一个类
class People(object):

    # 类中的方法
    def play(self):
        print('在玩耍....')


# 通过对象.方法名()


# 根据类创建一个对象 zs
zs = People()
# 要给张三添加属性  姓名  年龄  性别
# 在类外部给对象添加属性 使用的语法: 对象名.属性名 = 值
zs.name = "张三"  # 给zs对象添加了一个属性 name,属性的值是 张三
zs.age = 18
zs.gender = "男"
# 获取对象的属性的值 。 使用  对象名.属性名
print(f"学生的名字是:{zs.name}, 年龄是:{zs.age}, 性别: {zs.gender}")

zs.play()

04-类的内部获取属性

class People(object):

    def play(self):
        # 在类的内部想要去获取对象的属性的值, self.属性名
        print(f"{self.name}   在快乐的玩耍....")


# 创建一个对象
zs = People()
# 添加一个name属性
zs.name = "张三"
zs.age = 19

# 调用 play方法, 在调用该方法的时候,输出 : 张三 在快乐的玩耍
zs.play()

# 创建对象
xh = People()
# 小红添加一个属性
xh.name = "小红"
xh.age = 18
xh.play()

05-类和对象巩固

class Student(object):

    def study(self):
        print(f'{self.name} 正在学习....')

    def play(self):
        # 在类中的方法中 去调用另外的一个方法
        self.study()
        print(f'{self.name} 学习完了,可以去快乐的玩耍了....')


# 创建一个对象
zs = Student()
# 给对象添加一个属性 name
zs.name = "张三"
# 调用 play方法
# zs.study()
zs.play()


06-魔法方法init

class Student(object):

    # 在创建对象的时候,会自动调用
    def __init__(self, name, age):
        """
        init 方法又叫做 初始化方法,我们可以给对象添加一些默认的属性
        """
        print('init方法自动执行了...')
        # 添加一个默认的属性,班级
        self.classes = "Python+大数据57期"
        self.name = name
        self.age = age

# 创建了一个对象
# xm = Student("小明", 18)
xm = Student(name="小明", age=18)

# 获取一下 xm 是哪一个班级的学生?
print(xm.classes, xm.name, xm.age)

07-魔法方法str

class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 使用 print(对象) 定义 str这个魔法方法,str这个 方法中返回的内容是什么,那么输出的内容就是什么。
    def __str__(self):
        # 注意点: 这个方法必须要有return,而且返回值的类型必须是 字符串类型
        print('ajdsijdaisjdajsidjasidjasi')
        return f"我叫:{self.name}, 年龄是:{self.age}"
        # return "111111"

# 创建对象的时候,可以直接给对象添加name和age属性
zs = Student("张三", 18)

# 直接输出对象,那么打印的就是这个对象在内存中的引用地址
print(zs)  # 这一行 自动调用了 str 方法
print(zs.name, zs.age)
# 使用类型转换,将对象转换为字符串的时候, str(对象名)
print("------>", str(zs))

lisi  = Student("李四", 20)
print(lisi)

08-str

# 定义一个Dog类, 对象 有属性,name, clolor, 创建两个对象,在输出这两个对象的时候,直接输出两个对象的 名字和颜色
class Dog(object):
    def __init__(self, name, color):
        """
        在初始化的时候,给对象添加两个属性
        :param name: 名字
        :param color: 颜色
        """
        self.name = name
        self.color = color

    def __str__(self):
        return f"名字:{self.name}, 颜色:{self.color}"

dh = Dog("大黄", "黄色")
erha = Dog("二哈", "黑白配")

print(dh)
print(erha)

print(str(dh))
print(str(erha))

09-魔法方法del

class Student(object):
    def __del__(self):
        """
        1. 当对象的引用计数为0的时候
        2. 程序执行结束的时候
        """
        print('我是del方法,我执行了........')


s1 = Student()
# s1对象,有两个引用计数 s1 和 s2
s2 = s1


del s1
print('对象进行第一次删除.....')
del s2
print('对象进行第二次删除.....')


print('程序马上执行结束。。。。。')

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接