Python3 类

2023-01-31 04:01:58 python3

目录

python3

继承

项目组织方式

类编码风格


python中,首字母大写的名称值得是类,而小写的名称指的是根据类创建的实例。

Python类中的每个属性都必须有初始值。可以在__init__()方法内为某个属性设置默认初始值,此时无需包含为它提供初始值的形参。

类中的函数称为方法,Python类中的方法都必须有一个参数,该参数是实例化对象的自身引用,该参数通常命名为self,且该参数必须放在参数列表中的第一个位置。

__init__():类的构造方法,在创建类的实例化对象时,Python会自动调用该方法。Python在调用时,首先会去类的定义中看有没有重新定义的__init__()方法,如果有就用新定义;否则调用默认的__init__()方法。


#!/usr/bin/env python3
# -*- coding:utf-8 -*-


# 此类没有重写__inti()__构造方法
class Restaurant:
    """一个简单的餐馆类"""

    def description_restaurant(self):
        """对餐馆简单描述"""
        print("美味的四川火锅")


# 此类重写__inti()__构造方法
class Newrestaurant:

    def __init__(self, restaurant_name, cuisine_type):
        """重写构造方法:对属性赋值"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 0  # 设置默认初始值

    def description_newrestaurant(self):
        """打印餐馆的描述信息"""
        print("欢迎来到"+self.restaurant_name)
        print("我们是一家"+self.cuisine_type)

    def set_number_served(self, number):
        """设置就餐人数"""
        self.number_served = number

    def increment__number_served(self, increment):
        """增加就餐人数"""
        self.number_served = self.number_served + increment

    def print_numbers(self):
        """打印餐馆目前就餐人数"""
        print("现在共有"+str(self.number_served)+"人就餐,请耐心排队等候")


my_restaurant = Restaurant()  # 实例化一个对象
my_restaurant.description_restaurant()

new_restaurant = Newrestaurant("我爱南洋菜", "东南亚菜系")
new_restaurant.description_newrestaurant()
new_restaurant.print_numbers()  # 打印默认初始值就餐人数

new_restaurant.number_served = 120  # 直接修改属性的值
new_restaurant.print_numbers()  # 打印修改后的就餐人数

new_restaurant.set_number_served(46)  # 通过方法修改属性的值
new_restaurant.print_numbers()  # 打印修改后的就餐人数

new_restaurant.increment__number_served(4)   # 通过方法递增修改属性的值
new_restaurant.print_numbers()  # 打印修改后的就餐人数

继承

当一个类继承另一个类时,它将自动获得另一个类的所有属性和方法:原有的类称为父类,而新类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。

创建子类时,父类必须包含在当前文档中,且必须位于子类前面。必须在括号中指定继承的父类名称


#!/usr/bin/env python3
# -*- coding:utf-8 -*-


# 父类
class Restaurant:
    """一家简单的餐馆"""

    def __init__(self, restaurant_name, cuisine_type):
        """重写构造方法:对属性赋值"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type

    def description_restaurant(self):
        """打印餐馆的描述信息"""
        print("欢迎来到"+self.restaurant_name)
        print("我们是一家"+self.cuisine_type+"店")


# 子类IceCreamStand继承Restaurant类
class IceCreamStand(Restaurant):
    """一家冰激凌小店"""

    pass  # 子类只继承父类的所有属性和方法,没有重写父类的方法或定义自己的属性和方法


# 子类NewIceCreamStand继承Restaurant类
class NewIceCreamStand(Restaurant):
    """一家冰激凌小店"""

    def __init__(self, restaurant_name, cuisine_type, flavors):  # 重写父类的构造方法,并新增子类特有属性flavors
        """
        先使用super()函数调用父类的构造方法,初始化父类的属性;再初始化子类的特有属性
        """
        super().__init__(restaurant_name, cuisine_type)
        self.flavors = flavors

    def description_restaurant(self):  # 重写父类的description_restaurant方法
        """打印餐馆的描述信息"""
        print("欢迎大家来到"+self.restaurant_name)
        print("我们是一家"+self.cuisine_type+"店")

    def description_icecream(self):  # 定义子类特有的方法
        """打印冰激凌的口味"""
        n = 1
        print("本店销售各种口味的冰激凌:")
        for ice in self.flavors:
            print(str(n)+"、"+ice+"口味")
            n = n + 1


my_icecreamstand = IceCreamStand("夏天的味道", "冰激凌")
my_icecreamstand.description_restaurant()

flavors = ["香草味", "巧克力味", "草莓味", "芒果味", "抹茶芝士味"]
new_icecreamstand = NewIceCreamStand("新夏天的味道", "冰激凌", flavors)
new_icecreamstand.description_restaurant()
new_icecreamstand.description_icecream()

项目组织方式

一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有工作,确定一切都能正确运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中。先找出能够让你编写出可行代码的方式,再尝试让代码更为组织有序。

类编码风格

类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。

实例名和模块名都采用小写格式,并在单词之间加上下划线。

对于每个类,都应紧跟在类定义之后包含一个文档字符串,该文档字符串应简要描述类的功能。

每个模块也都应包含一个文档字符串,对其中的类可以用于做什么进行描述。

需要同时导入标准库中的模块和你自己编写的模块时,先编写导入Python标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句。

相关文章