Python——面向对象

发布时间:2024年01月21日

前言

? ? ? ? 小伙伴们好久不见,本期我们了解一下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()

运行结果

文章来源:https://blog.csdn.net/qq_43580381/article/details/135734309
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。