Python3 类

发布时间:2019-09-03 08:55:52编辑:auto阅读(1593)

    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语句。

关键字