不用看网课就能学到python的文章(第五天)

简介: 不用看网课就能学到python的文章(第五天)

类是对一群具有相同 特征 或者 行为 的事物的一个统称,是抽象的,不能直接使用。

特征其实就是一个变量,在类里我们称之为属性。

行为其实就是一个函数,在类里我们称之为方法。

类其实就是由 属性 和 方法 组成的一个抽象概念。


对象(实例)


对象是由类创建出来的一个具体存在,可以直接使用。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。在开发中,应该先有类,在类里定义好属性和行为,再根据类来创建对象。


类和对象的关系

类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。

使用同一个类,能够创建出很多对象。

类中定义了什么属性和方法,对象中就有什么属性和方法。

不同对象对应的属性值也会不同三、类的定义

 

class 类名():
  def 方法1(self,参数列表):
      pass
    def 方法2(self,参数列表):
        pass


类中的成员

类属性

方式一:通过 类名.类属性 访问

方式二:通过 实例对象.类属性 访问

class Person(object):
    # 类属性
    num = 10
p = Person()
# 方式一
print(Person.num)
# 方式二
print(p.num)

面向对象


通过前面对于面向对象编程的操作,我们已经了解面向对象编程是指创造一个类(动物类,植物类等等)这些类有很多种特征(属性),这些特征又是如何实现(方法,函数)。那么面向对象就是就是针对某一类物体进行的介绍与方法


其实说白了面向对象是就是对代码进行封装,列表也是封装,字典元组集合也是如此,函数亦是如此,面向对象的三大特征是指:封装性,继承性还有多态性

创建一个乌龟类

class wugui():
    color="绿色"
    foot=4
    weight=10
    has_guike=True
    #会爬
    def crawl(self):
        print("乌龟会爬")
    #会吃
    def eat(self):
        print("乌龟会吃")
    #会睡觉
    def sleep(self):
        print("乌龟会睡觉")

面向对象要比函数变量更加体现出事物的特征

构造方法:

def __init__(self,......):

这个操作主要是构造特征的时候解释器会自动调用它,在括号内可以包含很多参数用逗号分割开,但是self是必不可少的


类体中的变量类型


所有函数之外,此范围定义的变量,称为类属性或类变量


函数内部,以self.变量名的方法定义但是变量,称为实例属性或实例变量


函数内部,以变量名=变量值的方法定义的变量称为局部变量操作

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sit(self):
        print(self.name.title() + " is now sitting.")
    def roll_over(self):
        print(self.name.title() + " rolled over!")

变量

在c语言当中,曾经使用微信程序了解到,在一个程序运行的时候,程序从硬盘通过cpu的驱使下进入到内存中,程序是运行数据由诸多变量组成,变量的作用是存储数据,我们理解为变量在程序中开辟空间存储数据,再又小程序进行运行,变量像一个盒子装入了所有的数据


但是·在python中,变量和数据又有明显不同


在python中,数据自成空间进行运行,变量与数据没有包含关系,他的作用是用来保存数据的地址,它类似与c语言的指针,保存地址,指向这个数据完成代码等等运行


所以在python中,变量存储变量的地址就是变量的引用,在python中函数的参数传递和返回值都是靠变量的引用完成的


所以说在python中每次定义变量一定要对变量进行赋值,由于python的变量与数据的区别,所以必须必须有一个过程去访问赋值的地址,使用这个变量,这个过程就叫做引用

在给变量赋值的时候,本质上是修改了数据的引用

a=1
b=a
a=2


在这个赋值操作中,a的地址发生改变,但b没有


学啥啥不会,作业咋学都不会

1.

  • 创建以宠物命名的多个宠物字典,每个字典包括宠物类型和名字
  • 创建一个pets列表里面存放所有的宠物字典,全部显示出来
a=int(input("请输入你想创建的宠物资料个数"))
pets_list=[]
print("创建宠物信息")
for i in range(a):
    #自行输入(宠物名字和主人名字)
    pet_name=input("请输入宠物名字")
    name=input("请输入主人名字")
    #现在将这些信息保存在字典中,字典的名字为这个宠物的名字
    pet_name_dict={"pet_name":pet_name,"name":name}
    #自行创建一个宠物字典之后加入列表之中去
    pets_list.append(pet_name_dict)
    #提示成功加入一个宠物字典
    print("%s添加成功"%pet_name_dict["pet_name"])
    print("功能:显示全部")
# 判断是否有宠物字典记录
if len(pets_list) == 0:
    print("提示:没有任何名片记录")
else:
# 2. 显示所有宠物字典
    print("宠物\t\t主人")
    for pet_name_dict in pets_list:
        print("%s\t\t%s" % (
            pet_name_dict["pet_name"],
            pet_name_dict["name"],))

2.

  • 需要创造一个函数,函数的操作是对三明治进行增添食材,题目要求是只需要一个形参
  • 对三明治进行概述,题目的要求是概述三次
def make_sandwich(*shicai):
    print("\n三明治的食材为:")
    for shicai in shicai:
        print("  "+shicai)
make_sandwich('tuna')
make_sandwich('beef','tomato')
make_sandwich('chicken','ham','tomato')

3.利用多态性,编程创建一一个面积类Area内含有圆的面积S和周长C,创建两个子类:三角形和矩形,并在各自类中面积S,周长C计算方法。要求继承并覆写父类实现求三角形面积与周长,长方形面积与周长,圆的面积与周长并输出。要求输出圆的面积时不能直接调用父类函数

class Area():
    def __init__(self,r):
        self.r=r
    def C(self):
        c= 2 * 3.14 * self.r
        print("圆形的周长为%.2f"%c)
    def S(self):
        s=3.14*self.r*self.r
        print("圆形的面积为%.2f"%s)
class San(Area):
    def __init__(self,a,b,c):
        self.a=a
        self.b=b
        self.c=c
    def C(self):
        if (self.a + self.b) <= self.c or (self.a + self.c) <= self.b or (self.c + self.b) <= self.a:
            print("这三组数据不能构成三角形,请重新输入三组数据")
            return
        C=self.a+self.b+self.c
        print("三角形的周长为%.2f"%C)
    def S(self):
        if (self.a + self.b) <= self.c or (self.a + self.c) <= self.b or (self.c + self.b) <= self.a:
            print("这三组数据不能构成三角形,请重新输入三组数据")
            return
        p = (self.a + self.b + self.c) / 2.0
        h = p * (p - self.a) * (p - self.c) * (p - self.b)
        s = sqrt(h)
        print("三角形的面积为%.2f"%s)
class Ju(Area):
    def __init__(self,a,b):
        self.a=a
        self.b=b
    def C(self):
        c=self.a+self.b
        print("矩形的周长为%.2f"%c)
    def S(self):
        s=self.a*self.b
        print("举行的面积为%.2f"%s)
sanjiaoxing=San(1,4,5)
sanjiaoxing.C()
sanjiaoxing.S()
juxing=Ju(1,2)
juxing.S()
juxing.C()
yuanxing=Area(3)
yuanxing.S()
yuanxing.C()

4.2_ _1 餐馆餐:创建一个名为Restaurant的类,其方法__ init__ .() 设置两个属性:

restaurant_ name和cuisine_ _type 。创建一个名为describe_ _restaurant() 的方法和一个名为open_ restaurant() 的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。根据这个类创建-一个名为restaurant的实例,分别打印其两个属性,再调用前述两个方法。

class Restaurant():
    def __init__(self, restaurant_name, cuisine_type):
        """初始化属性restaurant_name和cuisine_type"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
    def describe_restaurant(self):
        print("The restarurant name is " + self.restaurant_name.title() )
        print("The restarurant's cuisine type is " + self.cuisine_type.title() )
    def open_restaurant(self):
        print("The " + self.restaurant_name.title() + " is openning!")
class Restaurant():
    my_restaurant=Restaurant('eight bowls','chinese food')
    print(my_restaurant.restaurant_name.title())
    print(my_restaurant.cuisine_type.title())
    my_restaurant.describe_restaurant()
    my_restaurant.open_restaurant()

5.2_ 4就餐人数:在为完成练习2_ _1而编写的程序中,添加一个名为number_ served的属性,并将其默认值设置为0。根据这个类创建一个 名为restaurant的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。添加一个名为set_ number_ served() 的方法,它让你能够设置就餐人数。调用这个方法并向它传递一一个值,然后再次打印这个值。添加一个名为

increment_ number _served()的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 0
    def  describe_restaurant(self):
        print("餐厅的名字是 " + self.restaurant_name.title() )
        print("餐厅主食是" + self.cuisine_type.title() )
    def open_restaurant(self):
        print("这个餐厅开门了!")
    def read_number_served(self):
        print(str(self.number_served) + " people have eaten in the restaurant.")
#print里面都是字符串,所以要进行转换str()
    def set_number_served(self,number):
        self.number_served = number
    def increment_number_served(self,number):
        self.number_served += number
my_restaurant = Restaurant('quanjude','chinese food')
my_restaurant.describe_restaurant()
my_restaurant.open_restaurant()
my_restaurant.read_number_served()
my_restaurant.set_number_served(2)
my_restaurant.read_number_served()

6.2成练习2_ _1或练习2_ 4而编写的Restaurant类。这两个版本的Restaurant类都可以,挑选你更喜欢的那个即可。添加一个名为flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写- -个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。__6冰淇淋小店冰:冰淇淋小店是-种特殊的餐馆。编写-个名为IceCreamStand的类

class Restaurant():
    """关于餐馆的一切信息"""
    def __init__(self, restaurant_name, cuisine_type):
        """初始化餐厅信息"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 0
    def describe_restaurant(self):
        """描述餐厅信息"""
        print("餐厅的名字叫:" + self.restaurant_name)
    def open_restaurant(self):
        """指出餐厅是否开业"""
        print("餐厅正在营业。")
    def set_number_served(self, set_number_served):
        """设置就餐人数"""
        self.number_served = set_number_served
        print("就餐人数为:" + str(self.number_served))
    def increment_number_served(self, increment_number_served):
        """就餐人数递增"""
        self.number_served += increment_number_served
        print(self.number_served)
class IceCreamStand(Restaurant):
    """父类Restaurant的子类"""
    def __init__(self, restaurant_name, cuisine_type):
        """初始化子类的方法"""
        super().__init__(restaurant_name, cuisine_type)
        self.flavors = []  # 创建一个用于存储列表的属性
    def show_ice(self, *ice_s):  # 设一个列表形参
        """显示冰淇淋"""
        self.flavors = ice_s  # 把形参赋值给属性
        print("冰淇淋有:")
        for i in self.flavors:  # 打印列表
            print("- " + i.title())
ice_cream_stand = IceCreamStand('人间美味', '中餐厅')  # 创建实例
ice_cream_stand.show_ice('冰1', '冰2', '冰3')  # 传递任意数量的参数

#经过一段时间,渐渐发现了python类中.的作用它的引用作用

#在第一个类中,引用作用的.是self的引用变量再加一个.是对于取赋值,赋值返回值要.和title()连用,赋值输出

#在第二个创建实例来说前两行和上面一致,从第三行开始是输出一个函数,把函数的取值引出来


在类的实例化中进行补充

对于类中变量赋值

输出类名=类名(“输入值”)


对于函数内赋值

输出类名.函数名(“输入值”)


相关文章
|
1月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
4月前
|
Python
揭秘Python编程核心:一篇文章带你深入掌握for循环与while循环的奥秘!
【8月更文挑战第21天】Python中的循环结构——for循环与while循环,是编程的基础。for循环擅长遍历序列或集合中的元素,如列表或字符串;而while循环则在未知循环次数时特别有用,基于某个条件持续执行。本文通过实例展示两种循环的应用场景,比如用for循环计算数字平方和用while循环计算阶乘。此外,还通过案例分析比较了两者在处理用户输入任务时的不同优势,强调了根据实际需求选择合适循环的重要性。
57 0
|
1月前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError(&quot;Invalid input&quot;)`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
2月前
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
20 1
|
3月前
|
存储 Go C语言
Python 的整数是怎么实现的?这篇文章告诉你答案
Python 的整数是怎么实现的?这篇文章告诉你答案
66 7
|
3月前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
在Python的Web开发领域中,RESTful API是核心技能之一。本教程将从零开始,通过实战案例教你如何使用Flask框架搭建RESTful API。首先确保已安装Python和Flask,接着通过创建一个简单的用户管理系统,逐步实现用户信息的增删改查(CRUD)操作。我们将定义路由并处理HTTP请求,最终构建出功能完整的Web服务。无论是初学者还是有经验的开发者,都能从中受益,迈出成为Web开发高手的重要一步。
68 4
|
2月前
|
存储 自然语言处理 数据库
Python字典操作实现文章敏感词检索
Python字典操作实现文章敏感词检索
33 0
|
2月前
|
存储 Java 开发者
用一篇文章告诉你如何篡改 Python 虚拟机
用一篇文章告诉你如何篡改 Python 虚拟机
14 0
|
4月前
|
Python
Python函数式编程:你真的懂了吗?理解核心概念,实践高阶技巧,这篇文章带你一次搞定!
【8月更文挑战第6天】本文介绍了Python中的函数式编程,探讨了高阶函数、纯函数、匿名函数、不可变数据结构及递归等核心概念。通过具体示例展示了如何利用`map()`和`filter()`等内置函数处理数据,解释了纯函数的一致性和可预测性特点,并演示了使用`lambda`创建简短函数的方法。此外,文章还强调了使用不可变数据结构的重要性,并通过递归函数实例说明了递归的基本原理。掌握这些技巧有助于编写更清晰、模块化的代码。
45 3
|
5月前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
【7月更文挑战第24天】在Python的Web开发领域,掌握RESTful API至关重要。利用Flask框架,可迅速搭建API,进行用户管理的CRUD操作。需先安装Flask (`pip install Flask`),然后定义路由处理GET、POST、PUT、DELETE请求,实现用户数据的检索、创建、更新和删除。
60 5