user.py

class User():  # 定义一个名为User的类
    """用户类"""

    def __init__(self, username, password):
        """初始化属性username和password"""
        self.username = username
        self.password = password
        self.isVIP=False

    def login(self):
        """用户登录"""
        print("用户需要登录了!!!")

    def register(self):
        """用户注册"""
        print("用户需要注册了!!!")

    def is_vip(self):
        """获取用户是否是VIP用户"""
        if self.isVIP:
            print("该用户是VIP用户")
        else:
            print("该用户不是VIP用户")


class VIPUser(User):# 该类继承自User类
    """VIP用户"""

    def __init__(self, username, password):
        """初始化父类的属性"""
        super().__init__(username, password)
        self.free = True  # 添加一个属性,VIP用户拥有很多免费特权,并设置其初始值为True

    def get_free(self):
        """获取更多的免费特权"""
        print("我能够每天签到领奖")
        print("我能够获取更多的优惠")

    def register(self):  # 重写父类的register()方法
        print("VIP用户注册即可领取大礼包")

类的导入实例及讲解

# 4、导入类
# 4.1 导入单个类
# python允许你将类存储在模块中,然后在主程序中导入所需要的模块
# 导入单个类的语法如下:from python_file_name import class_name
from user import User  # 从user.py文件中导入User类

first_user = User("张三", "123")  # 创建User类的实例
first_user.isVIP = True  # 设置属性
first_user.is_vip()  # 调用方法

# 4.2 从一个模块中导入多个类
# 一个模块(一个python文件)可以存储多个类
# 可根据需要在程序文件中导入任意数量的类
# 从一个模块中导入多个类时,用逗号分隔各个类
# 从一个模块中导入多个类的语法如下:from python_file_name import class_name1,class_name2,class_name3
from user import User, VIPUser  # 从user.py文件中导入User、VIPUser类

second_user = User("张三", "123")  # 创建User类的实例
second_user.register()  # 调用register()方法
third_user = VIPUser("李世民", "abc")  # 创建VIPUser类的实例
third_user.register()  # 调用register()方法

# 4.3 导入整个模块
# 导入整个模块,然后使用句点表示法访问现需要的类
# 由于创建类实例的代码都包含模块名,因此不会与当前使用的任何名称发生冲突
# 导入整个模块的语法如下:import module_name
import user  # 导入整个模块

fourth_user = user.User("李四", "rfv")  # 实例化User类
fourth_user.login()  # 调用login()方法

# 4.4 导入模块中的所有类
# 但是不推荐这种导入方式,因为可能发生命名成上的冲突
# 导入模块中的所有类的语法如下:from module_name import *

# 4.5 在一个模块中导入另一个模块
# 有时候,需要将类分散到多个模块中,以免模块太大,或在同一个模块中存储不相关的类。
# 将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。
# 在这种情况下,可在前一个模块中导入必要的类。
# 在一个模块中导入另一个模块语法如下:from module_name import class_name

类的命名规范:

  • 类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
  • 对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。
  • 可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。
  • 需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的 import 语句,再添加一个空行,然后编写导入你自己编写的模块的 import 语句。在包含多条 import 语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。