前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python类(二)

python类(二)

作者头像
mwangblog
发布2018-07-04 14:12:04
2750
发布2018-07-04 14:12:04
举报
文章被收录于专栏:mwangblogmwangblog

编写类时,并不一定都是从空白开始。一个类也可以继承另一个类。

本文目录

  • 1 继承
  • 2 将类作为属性

继承

首先编写一个表示饭店基本信息的类:

代码语言:javascript
复制
class Restaurant ():
    """一个饭店的基本信息"""

    def __init__(self, name, main_food, phone, address):
        self.name = name
        self.main_food = main_food
        self.phone = phone
        self.address = address
        self.slogen = '欢迎来本店吃饭!'

    def print_info (self):
        print ("名字: \t " + self.name)
        print ("=====================")
        print ("食品: \t " + self.main_food)
        print ("联络: \t " + self.phone)
        print ("地址: \t " + self.address)
        print (self.slogen)

    def set_slogen (self, slogen):
        self.slogen = slogen

这个类接收饭店的名字、主营食品、电话和地址作为参数,并将其赋值给相应的属性。标语属性(slogen)设置了一个默认值,可以通过专门的方法set_slogen()来更新。还有一个print_info()方法,可以显示饭店的基本信息。

下面的语句创建一个此类的实例,并调用了print_info()方法:

代码语言:javascript
复制
hq_offal = Restaurant ('环球卤煮', '卤煮', '1234567890', '好莱坞环球影业旁边')hq_offal.print_info()

执行结果如下:

代码语言:javascript
复制
名字:      环球卤煮
=====================
食品:      卤煮
联络:      1234567890
地址:      好莱坞环球影业旁边
欢迎来本店吃饭!

咖啡厅也是饭店的一种,现在新写一个咖啡厅类,它继承饭店类:

代码语言:javascript
复制
class Coffee_shop (Restaurant):
    """一个咖啡馆的基本信息"""
    def __init__(self, name, main_food, phone, address, theme):
        super().__init__(name, main_food, phone, address)
        self.theme = theme    def print_info (self):
        print ("名字: \t " + self.name)
        print ("=====================")
        print ("食品: \t " + self.main_food)
        print ("主题: \t " + self.theme)
        print ("联络: \t " + self.phone)
        print ("地址: \t " + self.address)
        print (self.slogen)

可以看到,在类名后面的括号()里写入继承的类,即可继承该类,比如本例中class Coffee_shop (Restaurant):表示Coffee_shop类继承自Restaurant类。

在继承一个类后,原有的类称为父类,新类称为子类。子类将自动的获得父类的属性和方法。

在新类Coffee_shop初始化函数__init()__中,使用了父类的初始化方法,即super().__init__()super()代表父类,即Restaurant类。在初始化过程中还定义了新类特有的属性theme

在新类中,重写了从父类继承的函数:print_info()。当新类的实例调用此方法时,将使用新类的方法,而不是父类的同名方法。

下面为新类创建一个实例:

代码语言:javascript
复制
cat_coffee = Coffee_shop ('喵了个咪的喵的咖啡馆', '咖啡', '0987654321', '猫咪救助站旁边', '猫')cat_coffee.set_slogen('这杯咖啡是朕赏给你的。')cat_coffee.print_info()

这个例子中调用了子类Coffee_shopset_slogen()方法,由于子类没有重写该继承自父类Restaurant的方法,因此调用了父类的此方法。

执行结果如下:

代码语言:javascript
复制
名字:      喵了个咪的喵的咖啡馆
=====================
食品:      咖啡
主题:      猫
联络:      0987654321
地址:      猫咪救助站旁边
这杯咖啡是朕赏给你的。

将类作为属性

在Python中,可以将一个类作为另一个类的属性,比如下面的程序中,将Main_food类作为Restaurant类的main_food属性:

代码语言:javascript
复制
class Main_food ():
    """主营食品的基本描述"""

    def __init__ (self, main_food):
        self.name = main_food['name']
        self.price = main_food['price']
        self.review = main_food['review']

    def print_food (self):
        print ("食品: \t %s(%f):%s" % (self.name, self.price, self.review))class Restaurant ():
    """一个饭店的基本信息"""

    def __init__(self, name, main_food, phone, address):
        self.name = name
        self.main_food = Main_food(main_food)   # 将类作为属性
        self.phone = phone
        self.address = address
        self.slogen = '欢迎来本店吃饭!'

    def print_info (self):
        print ("名字: \t " + self.name)
        print ("=====================")
        self.main_food.print_food()     # 调用作为属性的类
        print ("联络: \t " + self.phone)
        print ("地址: \t " + self.address)
        print (self.slogen)

    def set_slogen (self, slogen):
        self.slogen = slogen

我们先定义了一个类Main_food,它代表着主营食品,它接受一个字典作为参数,并有一个显示食品基本信息的方法print_food()

在类Restaurant中,将属性main_food指向类Main_food。随后即可直接调用此属性,比如在print_info()方法中,self.main_food.print_food()表示调用属性main_food(其实指向Main_food类)的print_food()方法。

执行下面的程序:

代码语言:javascript
复制
bxq_offal_food_des = {'name':'卤煮', 'price':25, 'review':'昨天吃了两碗卤煮觉得学习更棒了!'}bxq_offal = Restaurant ('北新桥卤煮', bxq_offal_food_des, '010-84015365', '东四北大街141号(近如家北新桥店)')bxq_offal.print_info()

得到的结果如下:

代码语言:javascript
复制
名字:      北新桥卤煮
=====================
食品:      卤煮(25.000000):昨天吃了两碗卤煮觉得学习更棒了!
联络:      010-84015365
地址:      东四北大街141号(近如家北新桥店)
欢迎来本店吃饭!
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 继承
  • 将类作为属性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档