Python3 类

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python类的私有变量

    1)_xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如:当使用“from Mimport”...

    用户2398817
  • Python学习【魔术方法】

    用户2398817
  • Selenium&PhantomJS实战一:获取代理ip

    用Selenium&PhantomJS完成的网络爬虫,最适合使用的情形是爬取有JavaScript的网站,用来爬其他的站点也一样给力

    用户2398817
  • 从3000行缩减到1000行,用django类代替视图函数

    zhaoolee
  • 2019年腾讯云服务器价格表(价格定价器)

    许多用户购买腾讯云服务器之前都想先查询下腾讯云服务器价格表,其实腾讯云有专门的价格计算器,只是很多用户没有注意到而已,腾讯云服务器价格通过价格计算器查询下就知道...

    人工智能谁与争锋
  • Kotlin 社区的新博客和新论坛

    没错,我们的博客和论坛目前开始尝试向官方对齐,这样做的好处就是,系统的维护成本将得到显著的降低,我们可以抽出绝大多数的人力来输出资源,这样对于大家的学习看上去更...

    bennyhuo
  • python类(三)

    mwangblog
  • iframe高度自适应的IE解决方案

    主页面main.html  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht...

    菩提树下的杨过
  • python pyqt5 ui生成py 常用

    D:\soft\Miniconda3\Scripts\pyuic5.exe -o testde.py D:\file\python\siflask\test.u...

    用户5760343
  • 【干货】Android根据类生成签名字符串

    昨天我们已经实现了《C#根据类生成签名字符串(附DEMO下载地址)》,因为与后台做通讯时有可能是多客户端的,今天我们把Android这个实现方式也做出来

    Vaccae

扫码关注云+社区

领取腾讯云代金券