首页 > 编程语言 >Python第八课——类

Python第八课——类

时间:2023-10-23 22:31:42浏览次数:34  
标签:__ Python self odometer 第八课 model make def

将函数和数据封装起来,形成类,用类再来创建对象。比如我创建了小狗这一个类,然后创造了名为William,年龄6岁的小狗,这只狗就是对象。

一、创建和使用类

1、创建dog类

以下是Python的类代码的基本结构:

class ClassName:
    # 一些类的属性和方法
    def __init__(self, arg1, arg2, ...):
        # 初始化方法
    def method1(self, arg1, arg2, ...):
        # 方法1
    def method2(self, arg1, arg2, ...):
        # 方法2
    # 其他方法

其中:

  • class 关键字表示定义一个类。
  • ClassName 是类的名称,按照惯例,类名称的首字母应该大写。
  • 类的属性和方法写在类的内部,使用缩进表示属于类的代码块。
  • __init__ 方法是类的构造函数,用于初始化对象的属性。
  • self 是表示对象本身的关键字,在方法中必须作为第一个参数。
  • 类的方法可以接受任意数量的参数,包括其他对象或基本数据类型。
  • 在类中定义的属性和方法可以通过对象访问,也可以通过类访问。
class Dog:
#class就表示类,Dog首字母大写表示类
#一次模拟小狗的尝试
    def __init__(self,name,age):
        """初始化属性name和age"""#“”“”“”这个注释还必须缩进4格子
        self.name=name
        self.age=age
    def sit(self):
        #  """模拟小狗收到命令时做下"""
        print(f"{self.name} is now sitting")
    def roll_over(self):
        """模拟小狗收到命名时打滚"""
        print(f"{self} rolled over")

__int__()有四个下划线。name和age为通过实例可以访问的变量称为属性。里面的函数称为方法。

2、根据类创建实例

class Dog:
#class就表示类,Dog首字母大写表示类
#一次模拟小狗的尝试
    def __init__(self,name,age):
        """初始化属性name和age"""#“”“”“”这个注释还必须缩进4格子
        self.name=name
        self.age=age
    def sit(self):
        #  """模拟小狗收到命令时做下"""
        print(f"{self.name} is now sitting")
    def roll_over(self):
        """模拟小狗收到命名时打滚"""
        print(f"{self.name} rolled over")
my_dog=Dog("willie",6)#类创建的实例
print(f"my dog is called {my_dog.name}")#要访问属性,用点号
print(f"my dog is {my_dog.age} ")

小写字母表示类创建的实例

  • 访问属性

要访问属性(类中第一个函数里的形参,除了self),用点号

my_dog.name
  • 调用方法
class Dog:
#class就表示类,Dog首字母大写表示类
#一次模拟小狗的尝试
    def __init__(self,name,age):
        """初始化属性name和age"""#“”“”“”这个注释还必须缩进4格子
        self.name=name
        self.age=age
    def sit(self):
        #  """模拟小狗收到命令时做下"""
        print(f"{self.name} is now sitting")
    def roll_over(self):
        """模拟小狗收到命名时打滚"""
        print(f"{self.name} rolled over")
my_dog=Dog('willie',6)
my_dog.sit()
my_dog.roll_over()

Python第八课——类_子类

  • 创建多个实例
my_dog=Dog('willie',6)
your_dog=Dog('cue',16)

二、使用类和实例

1、car类

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
    def get_descriptive_name(self):
        """返回格式化描述的信息"""
        long_name=f"{self.year} {self.make} {self.model}"
        return long_name.title()

my_new_car=Car('audi','a4',25)
print(my_new_car.get_descriptive_name())

Python第八课——类_父类_02

2、给属性指定默认值

给里程这个默认值,不用放在形参里面

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=110#给里程这个默认值,不用放在形参里面
    def read_odometer_reading(self):
        """返回格式化描述的信息"""
        print(f"{self.make} {self.model} has {self.odometer_reading} on it")
my_new_car=Car('audi','a4',25)
my_new_car.read_odometer_reading()

3、修改属性的值

三种方法分别为:直接修改属性的值、通过方法设置、通过方法传递值(增加特定的值)

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=110#给里程这个默认值,不用放在形参里面
    def read_odometer_reading(self):
        """返回格式化描述的信息"""
        print(f"{self.make} {self.model} has {self.odometer_reading} on it")
    def update_odometer_reading(self,mileage):
        """返回格式化描述的信息"""
        self.odometer_reading=mileage#通过方法设置
    def increment_odometer(self,miles):
        """让里程表的读数增加特定的增量"""
        self.odometer_reading+=miles
my_new_car=Car('audi','a4',25)
my_new_car.odometer_reading=90#直接修改
my_new_car.update_odometer_reading(99)#通过方法设置
my_new_car.increment_odometer(100)#通过方法让属性的值递增

三、继承

子类继承父类的所有属性和方法

1、子类的__init__()方法

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=110#给里程这个默认值,不用放在形参里面
    def read_odometer_reading(self):
        """返回格式化描述的信息"""
        print(f"{self.make} {self.model} has {self.odometer_reading} on it")

    def get_descriptive_name(self):
        """返回格式化描述的信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()
    def update_odometer_reading(self,mileage):
        """返回格式化描述的信息"""
        self.odometer_reading=mileage#通过方法设置
    def increment_odometer(self,miles):
        """让里程表的读数增加特定的增量"""
        self.odometer_reading+=miles
class ElectricCar(Car):#继承父类就加入父类的名
    """电动汽车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父类的属性"""
        super().__init__(make,model,year)#super()是一个特殊的函数,
        #让你可以调用父类的方法
my_car=ElectricCar('benchi','baoma','x90')
print(my_car.get_descriptive_name())

2、给子类定义属性和方法

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=110#给里程这个默认值,不用放在形参里面
    def read_odometer_reading(self):
        """返回格式化描述的信息"""
        print(f"{self.make} {self.model} has {self.odometer_reading} on it")

    def get_descriptive_name(self):
        """返回格式化描述的信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()
    def update_odometer_reading(self,mileage):
        """返回格式化描述的信息"""
        self.odometer_reading=mileage#通过方法设置
    def increment_odometer(self,miles):
        """让里程表的读数增加特定的增量"""
        self.odometer_reading+=miles
class ElectricCar(Car):
    """电动汽车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父类的属性"""
        super().__init__(make,model,year)
        self.battey_size=40#给子类定义属性和方法
    def describe_battery(self):#给子类定义属性和方法
        """打印一条描述电池容量的消息"""
        print(self.battey_size)
my_car=ElectricCar('benchi','baoma','x90')
print(my_car.get_descriptive_name())
my_car.describe_battery()#给子类定义属性和方法

3、重写父类中的方法

子类中与父类同名的方法,python就会忽略父类中的方法 只关注你在子类中定义的方法

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=110#给里程这个默认值,不用放在形参里面
    def read_odometer_reading(self):
        """返回格式化描述的信息"""
        print(f"{self.make} {self.model} has {self.odometer_reading} on it")

    def get_descriptive_name(self):
        """返回格式化描述的信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()
    def update_odometer_reading(self,mileage):
        """返回格式化描述的信息"""
        self.odometer_reading=mileage#通过方法设置
    def increment_odometer(self,miles):
        """让里程表的读数增加特定的增量"""
        self.odometer_reading+=miles
    def fill_gas_tank(self):#这是与子类同名的方法,python就会忽略父类中的方法
        #只关注你在子类中定义的方法
        """电动车有汽油"""
        print("the car has a gas tank")
class ElectricCar(Car):
    """电动汽车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父类的属性"""
        super().__init__(make,model,year)
        self.battey_size=40
    def describe_battery(self):
        """打印一条描述电池容量的消息"""
        print(self.battey_size)
    def fill_gas_tank(self):#这是与父类同名的方法,python就会忽略父类中的方法
        #只关注你在子类中定义的方法
        """电动车没有汽油"""
        print("the car has not a gas tank")
my_car=ElectricCar('benchi','baoma','x90')
my_car.fill_gas_tank()#只会显示子类的方法,舍弃父类同名的方法

4、将实例用作属性

将大型类拆分成多个协同工作的小类,这种方法称为组合。

比如电动车中有和很多包含电池的属性和方法,就单独提取出来,作为一个类

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=110#给里程这个默认值,不用放在形参里面
    def read_odometer_reading(self):
        """返回格式化描述的信息"""
        print(f"{self.make} {self.model} has {self.odometer_reading} on it")

    def get_descriptive_name(self):
        """返回格式化描述的信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()
    def update_odometer_reading(self,mileage):
        """返回格式化描述的信息"""
        self.odometer_reading=mileage#通过方法设置
    def increment_odometer(self,miles):
        """让里程表的读数增加特定的增量"""
        self.odometer_reading+=miles
    def fill_gas_tank(self):#这是与子类同名的方法,python就会忽略父类中的方法
        #只关注你在子类中定义的方法
        """电动车有汽油"""
        print("the car has a gas tank")
class Battery:#单独提出来
    """一次模拟电动车的简单尝试"""
    def __init__(self,battery_size=40):
        """初始化电池的属性"""
        self.battery_size=battery_size
    def describe_battery(self):
        """打印一条描述电池容量的信息"""
        print(f"{self.battery_size}_kwh")
class ElectricCar(Car):
    """电动汽车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父类的属性"""
        super().__init__(make,model,year)
        self.battery=Battery()#单独提出的赋值给电动车
    def fill_gas_tank(self):#这是与父类同名的方法,python就会忽略父类中的方法
        #只关注你在子类中定义的方法
        """电动车没有汽油"""
        print("the car has not a gas tank")

my_car=ElectricCar('benchi','baoma','x90')
my_car.battery.describe_battery()#电动车类和电池类就在一起了

5、模拟实物

属性、方法、类、父类、子类、单独类之间的相互关系的运用,就可以用代码来描述实际事物
















































标签:__,Python,self,odometer,第八课,model,make,def
From: https://blog.51cto.com/EddieLai/7994856

相关文章

  • 【python笔记】杂乱版
    numpy.tile的作用importnumpyasnp#重复一个标量值scalar=5result1=np.tile(scalar,3)print(result1)#输出:[5,5,5]#重复一个数组arr=[1,2,3]result2=np.tile(arr,2)print(result2)#输出:[1,2,3,1,2,3]#在两个维度上进行不同次数的重......
  • 力扣每日一题+python知识点回顾(六)
    力扣题目:老人的数目(题号:2678)给你一个下标从0开始的字符串details。details中每个元素都是一位乘客的信息,信息用长度为15的字符串表示,表示方式如下:前十个字符是乘客的手机号码。接下来的一个字符是乘客的性别。接下来两个字符是乘客的年龄。最后两个字符是乘客的座位......
  • Python 数组和列表:创建、访问、添加和删除数组元素
    Python没有内置支持数组,但可以使用Python列表来代替。数组本页将向您展示如何使用列表作为数组,但要在Python中使用数组,您需要导入一个库,比如NumPy库。数组用于在一个变量中存储多个值:示例,创建一个包含汽车名称的数组:cars=["Ford","Volvo","BMW"]什么是数组?数组是......
  • 力扣每日一题+python知识点回顾(五)
    力扣题目:做菜顺序(题号:1402)一个厨师收集了他n道菜的满意程度satisfaction,这个厨师做出每道菜的时间都是1单位时间。一道菜的「like-time系数」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是time[i]*satisfaction[i]。返回厨师在准备了一......
  • Python调用C或者C++
    基本说明文件类型介绍.out是可执行文件,相当于win上的exe;.o是编译中间目标文件,相当于win上的.obj;.a是静态库,多个.o练链接得到,用于静态链接;.so是共享库,用于动态链接,相当于win上.dll可执行文件file查看文件类型ldd命令查看某个可执行文件依赖了哪些动态链接库ldd能够显示......
  • Python学习1
    syntax blocks#statements->instruction1.literal90、"ONE"2.operator3.comment4.variablestoremodifyaccess5.functiondefadd(n):#statementreturnn6.keyword Writecodeinoneofthesethreecommonways:Directly(python.exe)Progr......
  • 力扣每日一题+python知识点回顾(四)
    力扣题目:统计无向图中无法互相到达点对数(题号:2316)给你一个整数n,表示一张无向图中有n个节点,编号为0到n-1。同时给你一个二维整数数组edges,其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边。请你返回无法互相到达的不同点对数目。示例一:输入:n=3,edges=[[0,1],[0,2......
  • Python40days
    针对记录的SQL语句配置文件的介绍存储引擎的使用(存储的方式)数据类型***整型  浮点型  字符串 日期 枚举约束条件zerofill unsigned  notnu default  unique primarykey auto_increment———————————————————————————......
  • CentOS 7 安装 Python 3.10
    1.安装编译所需的依赖sudoyum-yupdatesudoyum-yinstallopenssl-devellibffi-develbzip2-develsudoyum-ygroupinstall"DevelopmentTools" 2.安装Python3.10必需的openssl>=1.1.1wgethttps://www.openssl.org/source/openssl-1.1.1q.tar.gz-......
  • Python网页应用开发神器fac 0.2.10版本新功能介绍
    fac项目地址:https://github.com/CNFeffery/feffery-antd-components欢迎star支持⭐大家好我是费老师,由我开源维护的Python网页通用组件库fac前不久更新至0.2.10新版本,使用下列命令可快速完成更新:pipinstallfeffery-antd-components-U-ihttps://mirrors.aliyun.com/p......