Python——面向对象

本文介绍了Python中的面向对象编程概念,包括类的定义、实例化、方法的使用(如self参数)、构造函数(__init__)、有参和无参版本、访问权限控制、封装、继承关系以及重写父类方法。通过实例代码演示了这些核心概念的实际应用。
摘要由CSDN通过智能技术生成

前言

        小伙伴们好久不见,本期我们了解一下Python中面向对象的一些基础知识,为以后的上位机学习做下基础,因为前面我们对c语言进行了系统学习,所以Python基础知识我们就不做阐述了,逻辑基本相同,就是书写的格式有所差别。本期内容简洁明了,主要展示示例代码。

类的方法和基本使用

介绍及要求

"""
定义类格式:
# Python3以后,3种写法完全等价
#class 类名:
#class 类名():
class 类名(object): # 新式类写法,object所有类的祖先
    方法的定义

注意:类名 建议 大驼峰命名法

类的设计
类名: 人类(Person)
属性: 无
方法: 吃饭(eat)/运动(run)

1. 定义类,只是定义了一个类型
2. 根据类创建对象(实例化对象), 通过设计图创建一个实物
    格式:  实例对象变量名 = 类名() # 小括号一定不能省略
3. 类外面方法如何调用
    对象变量.方法名字()
"""

示例代码

class Person():
    def eat(self):
        print(f"{self.name}吃饭")
        
P = Person()
P.name = "mike"
P.eat()

运行结果

类外添加和使用属性

介绍及要求

"""
在类的外面操作对象属性:
1. 创建对象变量(实例化对象)
2. 添加属性:对象.属性 = 内容
    注意:
    1. 第一赋值叫添加属性,下一次赋值叫修改属性
    2. 类外添加属性,了解即可
3. 使用属性:对象变量.属性
"""

示例代码

class Person():
    def eat(self):
        print(f"{self.name}吃饭")
        
P = Person()
P.name = "mike"
P.eat()

运行结果

self参数的使用

介绍及要求

"""
1. self是什么?
    谁调用方法,self就是那个谁
    tom对象调用eat方法,self就是tom对象
2. 如何访问属性和方法
    类方法里面: self.属性、self.方法()
    类外面:    对象变量名.属性、对象变量名.方法()
"""

示例代码

lass Person():
    def eat(self):
        print(f"{self.name}吃饭")

P = Person()
P.name = "Mike"
P.eat()

运行结果

无参__init__方法使用

介绍及要求

"""
__init__方法(双下划线,不是单下划线):
    1. 作用:初始化,添加属性
        self.属性变量名 = 内容
    2. 特点:创建对象的时候,实例化对象,自动调用__init__方法

类名:Person
属性:name
方法:
    __init__(): 添加属性,属性内容为'小明'
    eat(): 打印xx爱吃饭, xx替换为具体的属性
"""

示例代码

class Person():
    def __init__(self):
        self.name = "mike"
    def eat(self):
        print(f"{self.name}在吃饭")
P = Person()
P.eat()

运行结果

有参__init__方法使用

介绍及要求

"""
__init__方法(双下划线,不是单下划线):
    1. 作用:添加属性
    2. 特点:创建对象的时候,实例化对象,自动调用__init__方法
    3. 设置参数,创建对象时,除了self参数不用人为处理,其它参数需要和__init__参数匹配
        对象名 = 类名(实参1, 实参2) ====》 __init__(self, 形参1, 形参2)
"""

示例代码

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def eat(self):
        print(f"{self.name}在吃饭,{self.age}岁了")
P = Person("mike",18)
P.eat()

运行结果

__str__方法使用

介绍及要求

"""
__str__方法:
    0. 作用:方便打印对象的属性信息
    1. 返回值必须是字符串类型,不是返回print
    2. print(对象变量名)  对象变量名的位置替换为__str__()方法返回值的内容
"""

示例代码

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def eat(self):
        print(f"{self.name}在吃饭,{self.age}岁了")
    def __str__(self):
        return f"姓名:{self.name},年龄:{self.age}"
    
P = Person("mike",18)
P.eat()
print(P)

运行结果

面向对象:摆放家具

介绍及要求

"""
需求:
1. 房子(House) 有 户型、 总面积、剩余面积 和 家具名称列表
    - 新房子没有任何的家具、剩余面积和总面积相等
2. 家具(HouseItem) 有 家具名字 和 家具面积, 其中
    - 席梦思(bed) 占地 4 平米
    - 衣柜(chest) 占地 2 平米
    - 餐桌(table) 占地 1.5 平米
3. 将以上三件 家具 添加 到 房子 中
    - 向房间 添加家具 时, 让 剩余面积 -= 家具面积
4. 打印房子时, 要求输出: 户型、 总面积、 剩余面积、 家具名称列表

家具类
类名:HouseItem
属性:家具名称name、家具面积area
方法:
    __init__(): 添加属性
    __str__(): 以字符串格式返回属性信息


房子类
类名:House
属性:户型house_type、 总面积area、剩余面积free_area 和 家具名称列表item_name_list
方法:
    __init__(): 添加属性
    __str__(): 以字符串格式返回属性信息
    add_item(): 添加家具,需要一个形参house_item接收家具对象
"""

示例代码

# 家具类
class HouseItem():
    def __init__(self,name,area):
        self.name = name
        self.area = area
    def __str__(self):
        return f"名称:{self.name},面积:{self.area}"

# 房子类
class House():
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = area
        self.free_area = area
        self.item_name_list = []
    def __str__(self):
        return f"户型:{self.house_type},面积:{self.area},剩余面积:{self.free_area},家具名称列表:{self.item_name_list}"
    def add_item(self,temp:HouseItem):
        if self.free_area >= temp.area:
            print(f"添加家具{temp.name}成功,面积为{temp.area}平米")
            self.free_area -= temp.area
            self.item_name_list.append(temp.name)
        else:
            print(f"添加家具{temp.name}失败,剩余面积不足")

H = House("四居室",100)

# 席梦思(bed) 占地 4 平米
bed = HouseItem("bed",4)
print(bed)
H.add_item(bed)
print(H)
# 衣柜(chest) 占地 2 平米
chest = HouseItem("chest",2)
print(chest)
H.add_item(chest)
print(H)
# 餐桌(table) 占地 1.5 平米
table = HouseItem("table",1.5)
print(table)
H.add_item(table)
print(H)

运行结果

访问权限

介绍及要求

"""
说明: 当属性和方法只需要在类定义内部使用时, 就可以使用私有属性和私有方法

定义格式:
私有属性: __属性名
私有方法: def __方法名():

女孩类:
类名:Girl
实例属性:
    姓名name
    年龄__age
实例方法:
    __init__() 添加实例属性
    __secret() 打印年龄
    use_private() 公共方法
"""

示例代码

class Girl():
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    def __secret(self):
        print(self.__age)
    def use_private(self):
        self.__secret()
g = Girl("小明",18)
print(g.name)
g.use_private()

运行结果

封装

介绍及要求

"""
需求:
• 进入某 Web 项目登录页面, 输入用户名、 密码、 验证码之后登录系统
要求:
• 用户名为'admin',密码为'123abc',验证码为:'abcd',返回登陆成功,否则,返回登陆失败

类名:LoginPage
实例属性:用户名username、密码password、验证码verify_code
实例方法:
    __init__(): 添加属性
    __str__(): 返回字符串格式的属性信息
    login(): 登陆
"""

示例代码

class LoginPage():
    def __init__(self,username,password,verify_code):
        self.username = username
        self.password = password
        self.verify_code = verify_code
        
    def __str__(self):
        return f"用户名:{self.username}\n密码:{self.password}\n验证码:{self.verify_code}\n"
    def login(self):
        if self.username == "admin" and self.password == "123abc" and self.verify_code == "abcd":
            return "登陆成功"
        else:
            return "登陆失败"
lp = LoginPage("admin","123abc","abcd")
print(lp)
res = lp.login()
print(f"登录结果:{res}")

运行结果

继承

介绍及要求

"""
继承:复用代码,继承过来的东西可以复用,描述类和类之间的关系
格式:
class 子类名(父类名):
    pass

# 父类,也叫基类
# 子类,也叫派生类

父类名:Person
实例属性:name, age
实例方法:
    __init__() 添加实现属性
    say_hello() 打印 xxx say hello,今年 xxx 岁

子类名:Student 继承于 Person类
类里面没有实现任何功能
"""

示例代码

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hello(self):
        print(f"姓名:{self.name},年龄:{self.age}")
        
class Student(Person):
    pass

s = Student("mike",18)
s.say_hello()

运行结果

继承的重写

介绍及要求

"""
重写:重新写(定义)一次父类的同名方法
为什么需重写:父类同名方法不满足需求
子类如何调用父类同名方法:super().父类同名方法(参数)

父类名:Person
实例属性:name, age
实例方法:
    __init__() 添加实现属性
    say_hello() 打印 xxx say hello,今年 xxx 岁

子类名:Student 继承于 Person类
实例属性:新增score
实例方法:
    重写__init__()方法:调用父类的__init__,再增加score
    go_school(): 打印: xxx 去考试,得分:xxx
"""

示例代码

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hello(self):
        print(f"姓名:{self.name},年龄:{self.age}")
    
class Student(Person):
    def __init__(self,socre,name,age):
        super().__init__(name,age)
        self.socre = socre
    def goto_school(self):
        print(f"{self.name} 去考试,得分:{self.socre}")
        
s = Student(90,"mike",20)
s.goto_school()
s.say_hello()

运行结果

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Magic'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值