面向对象编程——2.细致了解

本文详细介绍了面向对象编程中的类、构造函数、实例属性、方法、类属性、类方法、静态方法、继承、封装、多态等核心概念,并探讨了Python中的内存管理、方法动态性、私有属性、@property装饰器以及特殊方法如__str__、__call__等。通过实例分析,帮助读者深入理解面向对象编程的原理和应用。
摘要由CSDN通过智能技术生成

一、引言

上一篇文章中,我们以就面向对象编程进行了简单的介绍,这一章主要是进行一些细致补充与拓展,这部分内容在初学python时就已经学到了,现在回顾,没有做到学与用的结合,切记!!!

二、类

  • 1.类的定义

python中“一切皆对象”。类称为类对象,类的实例称为实例对象。
在这里插入图片描述

  • 2.构造函数__init__
    一个python对象含以下部分:
    在这里插入图片描述
    在这里插入图片描述
  • 3.实例属性
    实例属性是从属于实例对象的属性
    要点:
    在这里插入图片描述
  • 4.实例方法
    实例方法是从属于实例对象的方法。
    定义格式:
    在这里插入图片描述
    在这里插入图片描述
    函数和方法的区别:
    在这里插入图片描述
    在这里插入图片描述
    例子:
class Bettery():
    """模拟电动汽车的电池"""

    def __init__(self, bettery_size=70):
        self.bettery_size = bettery_size  # 电池容量
        self.electric_quantity = bettery_size  # 电池剩余容量
        self.electric_distance_ratio = 5  # 电量距离换算系数
        self.remainder_range = self.electric_quantity *
        					 self.electric_distance_ratio  # 剩余可行驶距离

    def get_electric_quantity(self):
        """查看当前容量"""
        print("当前电池剩余电量:{}kw.h".format(self.electric_quantity))

    def set_electric_quantity(self, electric_quantity):
        """设置电池剩余电量,重新计算电量可支撑行驶里程"""
        if electric_quantity > 0 and electric_quantity < self.bettery_size:
            self.electric_quantity = electric_quantity
            self.remainder_range = self.electric_quantity * 
            								self.electric_distance_ratio
        else:
            print("电量未设置在合理范围内!")

    def get_remainder_range(self):
        """查看剩余可行驶里程"""
        print("当前电量还可以继续行驶{}公里".format(self.remainder_range))


class Car():
    """模拟汽车"""

    def __init__(self, brand, model, year):
        """初始化汽车属性"""
        self.brand = brand  # 品牌
        self.model = model  # 型号
        self.year = year  # 出厂年份
        self.mileage = 0  # 里程碑数

    def get_main_information(self):  # self不能省
        """获取汽车主要信息"""
        print("品牌:{},型号:{},出厂年份:{}".format(self.brand, self.model,
        		 self.year))

    def get_all_mileage(self):
        """获取总里程数"""
        return "行车总里程:{}公里".format(self.mileage)


class ElectricCar(Car):
    """模拟电动汽车"""

    def __init__(self, brand, model, year, bettery_size):
        """初始化电动汽车属性"""
        super().__init__(brand, model, year)
        self.bettery = Bettery(bettery_size)  # 电池

    def get_main_information(self):  # 重写父类方法
        """获取电动车的主要信息"""
        print("品牌:{}  型号:{}  出厂年份:{}  续航里程数:{}公里"
              .format(self.brand, self.model, self.year,
                      self.bettery.bettery_size * 
                      				self.bettery.electric_distance_ratio))


my_electric_car = ElectricCar("NextWeek", "FF91", 2046, 70)
# 获取车辆主要信息
my_electric_car.get_main_information()
# 获取当前电池量
my_electric_car.bettery.get_electric_quantity()
# 重设电量
my_electric_car.bettery.set_electric_quantity(50)
# 获取当前电量
my_electric_car.bettery.get_electric_quantity()
# 获取当前剩余可行驶里程数
my_electric_car.bettery.get_remainder_range()

# 获得对象的所有属性与方法
print(dir(my_electric_car))
# 获得对象的属性字典
print(dir(my_electric_car.__dict__))
# 判断对象是不是指定类型
print(isinstance(my_electric_car,ElectricCar))

# 品牌:NextWeek  型号:FF91  出厂年份:2046  续航里程数:350公里
# 当前电池剩余电量:70kw.h
# 当前电池剩余电量:50kw.h
# 当前电量还可以继续行驶250公里
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bettery', 'brand', 'get_all_mileage', 'get_main_information', 'mileage', 'model', 'year']
# ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
# True

创建过程
实例化对象时,先通过__new__创建对象,然后将对象地址传给__init__中的self参数,__init__用于初始化创建好的对象,最后再将创建好的对象地址返回给相应变量。

5.类对象
当解释器执行class语句时,就会创建一个类的类型对象(type)

class Student:        #创建Student类的类型对象(type)
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def say_score(self):
        print("{0}的分数是{1}".format(self.name,self.score))

stu = Student       #指向同一个类对象
s1 = stu("柳杰","100")
s2 = stu("谈昊田","99")
print(s1)
print(s2)
s1.say_score()
s2.say_score()
>>>
<__main__.Student object at 0x000001FE3C28F160>
<__main__.Student object at 0x000001FE3C28F128>
柳杰的分数是100
谈昊田的分数是99

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值