Python编程从入门到实践之类|第10天

User:你好我是森林 Date:2018-03-23 Mark:《Python从入门到实践》 原文:https://www.jianshu.com/p/0eb1a208dd9b

面向对象编程是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。

创建和使用类

创建Dog

根据约定,在Python中,首字母大写的名称指的是类。 这个类定义中的括号是空的,因为我们要从空白创建这个类。类中的函数称为方法。

代码如下:

class dog():
    # 创建一个小狗的类
    def _init_(self,name,age):
        # 初始化属性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!")

__init__方法

__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。它包含了三个形参:selfnameage,在这个方法的定义中,形 参self必不可少,还必须位于其他形参的前面。

根据类创建实例

可将类视为有关如何创建实例的说明。

代码示例:

my_dog = Dog('demo',18)
print(my_dog.name.title())
print(my_dog.age)

访问属性

要访问实例的属性,可使用句点表示法。例如my_dog.name

调用方法

要调用方法,可指定实例的名称和要调用的方法,并用句点分隔它们。

代码示例:

my_dog = Dog('demo', 6)
my_dog.sit()
my_dog.roll_over()

创建多个实例

my_dog = Dog('demo', 6)
you_dog = Dog('demo_go', 6)

使用类和实例

类编写好后,你的大部分时间都将花在使用根据类创建的实例上。你需要执行的一个重要任务是修改实例的属性。你可以直接修改实例的属性,也可以编写方法以特定的方式进行修改。

Car
class Car():
    # Car类
    def __init__(self,name,model,year):
        # 初始化
        self.name = name
        self.model = model
        self.year = year
    
    def get_descript(self):
        # 返回描述信息
        long_name = str(self.year) + '---' + self.name + '---' + self.model
        return long_name.title()
        
# 示例化
my_car = Car('audi','A4','2016')
print(my_car.get_descript())

处理的结果是:

2016---Audi---A4
给属性设置默认值

类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。在有些情况下,如设置默认值时,在方法__init__()内指定这种初始值是可行的;如果你对某个属性这样做了,就无需包含为它提供初始值的形参。

car类在__init__的方法新增属性self.odometer_reading = 0,同时新增一个方法read_odometer()

def read_odometer(self): 
    # 打印一条指出汽车里程的消息 
    print("汽车的里程有:" + str(self.odometer_reading))

调用该方法:

my_car = Car('audi','A4','2016')
print(my_car.get_descript())
my_car.read_odometer()
修改属性的值

可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)。

直接修改属性的值

代码如下:

my_new_car.odometer_reading = 23 my_new_car.read_odometer()

有时候需要像这样直接访问属性,但其他时候需要编写对属性进行更新的方法。

通过方法修改属性的值

Car类新增一个update_odometer()的方法,专门用来修改属性的值。

代码如下:

def update_odometer(self,update_value):
    # 修改里程值
    self.odometer_reading = update_value

在调用的时候就很简单了:

my_new_car.update_odometer(66)
my_new_car.read_odometer()

通过方法对属性的值进行递增

递增的逻辑其实很简单,只有将之前的记录保存并且和后面传入的值进行相加操作即可。

代码如下:

def update_odometer(self,update_value):
    # 修改里程值
    self.odometer_reading += update_value

调用方法:

my_new_car.update_odometer(6)
my_new_car.read_odometer()
my_new_car.update_odometer(1)
my_new_car.read_odometer() 

明天学习继承和导入的知识点。

欢迎你免费加入我的星球,一起分享,共同成长。

知识星球

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 开发者

Android 开发者如何函数式编程 (三)

37580
来自专栏owent

C++ 新特性学习(一) -- 概述+智能指针(smart_ptr)

C++ 0x/11 终于通过了,真是个很爽的消息。于是乎我决定对新的东西系统学习一下。

10410
来自专栏企鹅号快讯

编程语言学啥?当然首选Python啦!千字长文教你如何入门Python!

1.1 流程控制之for循环 ? 1.2 开发工具IDE 1.2.1 为何要用IDE ? 很多语言都有比较流行的开发工具,比如JAVA 的Eclipse, C#...

45960
来自专栏向治洪

python 日期与时间

###python 日期与时间 (time,datetime包) [toc] #####概述 在应用程序的开发过程中,难免要跟日期、时间处理打交道。如:记录一个...

462100
来自专栏owent

“C++的90个坑”-阅读笔记

C++确实是一门复杂的语言。包括之前查看了一些C++11的文档和做了一些实践和总结,越来越觉得C++是门神奇的语言,也是个陷阱多多的语言。 我现在开发过程中最...

9010
来自专栏Java后端技术栈

关于Java代码优化的N条建议!

本文是作者:五月的仓颉 结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,作者的说法是这样的:

13620
来自专栏iKcamp

翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 第 9 章:递归(下) 栈、堆 ...

24650
来自专栏小红豆的数据分析

小蛇学python(19)装饰器

python的装饰器是python的特色高级功能之一,言简意赅得说,其作用是在不改变其原有函数和类的定义的基础上,给他们增添新的功能。

11220
来自专栏大数据平台TBDS

Hive 时间转换函数使用心得

Hive sql 与传统的 oracle 或者mysql 的时间转换函数有一些不同,对于想将传统数据库迁移到hdfs 用 hive sql 进行处理的任务,如何...

4.8K120
来自专栏Brian

Python进阶教程(一)

概述 hi,朋友们大家好,今天将英文原著作者 @yasoob《Intermediate Python》进行翻译和在工作中使用的Python技巧进行了总结。Git...

38670

扫码关注云+社区

领取腾讯云代金券