Python基础——类

面向对象:类的使用

基本概念:

  1. 类:模拟现实世界的事物和场景
  2. 属性:参数;行为:函数
  3. 实例化:根据类创建对象
Dog 类(创建使用类):
  1. 创建Dog类:初始化方法+行为函数
class Dog():
    """小狗类编写"""

    def __init__(self, name, age):   #初始化方法
        self.name = name             #初始化属性name
        self.age = age               #初始化属性age

    def sit(self):                   #函数sit(),小狗的行为,让小狗蹲下
        print(self.name.title() + "已经蹲下")

    def roll(self):                  #函数roll(),小狗的行为,让小狗打滚
        print(self.name.title() + "正在打滚")
        

1. 约定python中首字母大写的名称是类
2. 初始化方法__init__(),必须要有self,它是指向实例的引用,访问类的属性和方法
  1. 创建使用类的实例:小写名称为实例
    初始化方法init()并未显示包含return语句,在用实参创建对象实例时,自动返回相应实例
my_dog = Dog("black", 6)              #实例化一个小狗对象my_dog,名为black,年龄为6

print("小狗%s今年%d岁了" %(my_dog.name, my_dog.age))    #通过对象调用属性
my_dog.sit()                          #通过对象调用方法

#print(my_dog.roll())   如果print打印的函数没有返回值,则输出None

输出:
小狗black今年6岁了
Black已经蹲下

Car类(使用并修改更新类):

类的创建与对象调用:

属性在类中直接使用,在类外通过对象调用

class Car():
    """模拟汽车"""
    #初始化对象属性:车场,型号,生产时间
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.li_cheng = 0              #可以在初始化方法中设置属性默认值,无需定义形参

    # 返回汽车信息
    def car_information(self):
        long_name = ("%s,%s,%d" %(self.make, self.model, self.year))    #类内直接使用属性
        return long_name

    #输出汽车行驶里程
    def car_licheng(self):
        print("汽车已经行驶%d公里" %self.li_cheng)   #类内部直接使用属性


my_car = Car("BMW", "新7系", 2019)           #实例化对象my_car
print(my_car.car_information())             #通过对象调用方法,输出车基本信息
my_car.car_licheng()                        #通过对象调用方法,打印汽车行驶里程

输出:
BMW,7,2019
汽车已经行驶0公里

修改属性值的方法:

  1. 直接在类外通过对象调用属性修改值:
my_car.li_cheng = 100    #对象找到属性直接赋值
my_car.car_licheng()     #打印
  1. 编写方法修改属性值:
class Car():
    --snip--
 #更新汽车行驶里程:
    def update_licheng(self, mileage):
        self.li_cheng = mileage

my_car.update_licheng(23)
my_car.car_licheng()

输出:
BMW,7,2019
汽车已经行驶23公里

Car类:继承(父类必须在子类前面)

基本概念:

  1. 编写的类是现有类的特殊版本,可由现成类继承编写新类
  2. 继承会自动获得父类的所有属性和方法,同时还可定义自己的属性和方法

格式:
class 子类名(父类名):
  def _init_ (self,x,xx,xxx) :
    super()._init_(x,xx)
    子类属性=值

class Car():
    """模拟汽车"""
    #初始化对象属性:车场,型号,生产时间
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.li_cheng = 0              #可以在初始化方法中设置属性默认值,无需定义形参

    # 返回汽车信息
    def car_information(self):
        long_name = ("%s,%s,%d" %(self.make, self.model, self.year))    #类内直接使用属性
        return long_name

    #输出汽车行驶里程
    def car_licheng(self):
        print("汽车已经行驶%d公里" %self.li_cheng)   #类内部直接使用属性

    #更新汽车行驶里程:
    def update_licheng(self, mileage):
        self.li_cheng = mileage


#使用继承,编写子类方法:
class Electric_car(Car):
    """电动车类,继承普通汽车类"""

    # 子类初始化方法
    def __init__(self, make, model, year):      
        super().__init__(make, model, year)     #调用父类初始化方法赋值
        self.battery_size = 70                  #设置子类的新属性

    # 编写子类方法
    def battary_inform(self):
        print("电瓶电量还有%d" %self.battery_size)   

my_electric_car = Electric_car("雅迪", "A8", 2020)   #初始化子类对象
print(my_electric_car.car_information())            
my_electric_car.battary_inform()                    #通过子类对象,可以调用子/父类所有方法

输出:
雅迪,A8,2020
电瓶电量还有70
  1. 重写父类方法:

当父类方法不符合子类行为时进行方法重写,子类方法名与父类方法名同名,子类对象调用方法使会忽略父类执行子类方法

    #重写父类方法(只是假设,父类中没有此方法)
    def gas_inform(self):
        print("电动车没有汽油")
        
my_electric_car.gas_inform()
 
输出:
电动车没有汽油
  1. 将对象实例作为属性:

场景:属性和方法清单越来越长,需要将类的一部分作为独立的类分离出来

例如:不断给Electric_car添加细节,可能有许多是专门针对电瓶的属性和方法,可以将它们提取出来放入新类Battery中,并将Battery的实例作为Electric_car类的属性

class Car():
    #--snip--
#"""电动车电瓶新类"""
class Battery():
   
    
    def __init__(self, battery_size = 70):
        self.battery_size = battery_size
    
    def des_battery(self):
        print("电动车电瓶电量还有%d" %self.battery_size)
        
#"""电动车子类"""
class Electric_car(Car):
    
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()             #将电瓶类的实例对象存入属性

my_electric_car = Electric_car("雅迪", "A8", 2020)
my_electric_car.battery.des_battery()

输出:
电动车电量还有70

学习忠告:

只要代码像你希望的那样运行,就说明你做的很好!!即便你发现自己不得不做多次尝试使用不同方法重写类,也不必气馁;要编写出高效、准确的代码,都得经过这样的过程!!!


导入类

假设上面编写所有的类都存储在car.py文件中

  1. 导入单个类:from car import Car
  2. 导入多个类:from car import Car,Electric_car
  3. 导入整个模块:import car

学习忠告:

一开始应让代码结构尽可能简单,先尽可能在一个文件中完成所有工作,确定一切正常后,再将类移到独立的模块中


Python标准库

概念:python标准库是一组模块,安装并导入后,可以使用标准库中的任何函数和类

例如:有序字典,collections模块的OrderedDict类

from collections import OrderedDict

fav_lan = OrderedDict()       #创建一个空的有序字典fav_lan

fav_lan["小明"] = "C"
fav_lan["小红"] = "pyhton"
fav_lan["小刚"] = "Java"

for k,v in fav_lan.items():
    print("%s喜欢%s" %(k,v))

输出:
小明喜欢C
小红喜欢pyhton
小刚喜欢Java

编码风格
  1. 类名:使用驼峰命名法,单词首字母大写,不使用下划线
  2. 实例名/模块名:小写+下划线
  3. 类定义后添加文档字符串,简介类
  4. import先导入标准库函数,再导入自己编写模块
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值