python面向对象编程基础

本文通过实例介绍Python中面向对象编程的基本概念,包括类的定义、实例化、继承及方法重写等内容,并演示如何将类的实例用作属性,最后讨论了模块化的编程方式。

一、基础实例代码 

class Car():
    def __init__(self, make, model, year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0  #如果对属性设置默认值,那么括号里面就不需要给
                                    #odometer_reading这个形参了
    def get_descriptive_name(self):
        long_name = str(self.year)+ " " + self.make + " " +self.model
        return long_name.title()
    def read_odometer(self):
        print(str(self.get_descriptive_name()) + " has " + str(self.odometer_reading) +  " miles on it")

#实例化
my_new_car = Car('audi', 'a6', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()


""" 笔记
1、以self为前缀的变量可以供类中的所有方法使用
2、在类中的一个函数中调用另一个函数,需要在前面加上self.
   例如本例的self.get_descriptive_name()


"""

  输出结果:

 

二、类的继承

子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法

注意:创建子类,继承父类时,父类必须包含在当前文件中,且位于所创建的子类前面

class Car():
    --snip(省略,同上)--


#子类ElectricCar继承父类Car
class ElectricCar(Car):
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year) """注意self参数已在super()中传入,在
                                         __init__()中将隐式传递,不需要写出(也不能写)"""

        """再初始化子类的特有属性"""
        self.battery_size = 70

    def describe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-KWh battery.")

#实例化
my_tesla = ElectricCar('tesla', 'model s', 2016)

print(my_tesla.get_descriptive_name())  """这个是父类的方法,子类继承过来了,可以直接用"""  
my_tesla.describe_battery()             """这是子类自己新定义的方法"""

三、重写父类的方法

对于父类的方法,只要它不符合子类模拟的实物的行为,对子类毫无意义,都可以对其进行重写

方法:在子类中定义一个与父类名字一样的方法

 这样的话,子类实例化运行时,会优先考虑子类中重写的这个方法,而忽略到父类中的同名方法

 

四、将类的实例用作属性

例如:创建一个新类Battery,把它实例化用作ElectriCar类的属性

class Car():
  --snip(省略)--

class Battery():
    """将电池封装成一个类"""
    def __init__(self, battery_size=70):
        self.battery_size=battery_size
    
    def describe_battery(self):
        print(" This car has a "+ str(self.battery_size) + "-KWh battery.")


class ElectricCar():
     def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()  """特别注意:将一个类的实例化作为另一个类的属性"""

#实例化
my_tesla = ElectricCar('tesla', 'model s ', 2016)

print(my_tesla.get_describe_name())
my_tesla.battery.describe_battery()

五、模块化简洁编程

创建一个模块文件car.py,包含只含Car类的代码

然后在另一个文件中导入并使用

 """从car.py文件(模块)中导入Car类"""
from car import Car  


my_new_car = Car('audi', 'a4', 2016) #类的实例化
print(my_new_car.get_descriptive_name())  #调用Car类中的方法

my_new_car.odometer_reading = 23   #直接修改属性值
my_new_car.read_odometer()  #调用Car类中的方法,打印消息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan Yi

老板行行好,打赏一下吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值