Python 使用类和实例
使用类和实例
- 直接修改实例的属性
- 编写方法以特定的方式进行修改
# 案例:
class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性'''
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
2016 Audi A4
给属性指定默认值
- 类中的每个属性都必须有初始值,哪怕这个值时0或空字符串
# 案例:
class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性'''
self.make = make
self.model = model
self.year = year
'''添加一个属性,初始值总是为0'''
self.odometer_reading = 0
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
'''打印一套指出汽车里程的消息'''
print("This car has " + str(self.odometer_reading) + ' miles on it')
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
2016 Audi A4
This car has 0 miles on it
修改属性的值
- 以三种不同的方式修改属性的值:
- 1.直接通过实例进行修改
- 2.通过方法进行设置
- 3.通过方法进行递增(增加特定的值)
# 1.直接修改属性的值
# 要修改属性的值,最简单的方式是通过实例直接访问它
# 案例:
class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性'''
self.make = make
self.model = model
self.year = year
'''添加一个属性,初始值总是为0'''
self.odometer_reading = 0
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
'''打印一套指出汽车里程的消息'''
print("This car has " + str(self.odometer_reading) + ' miles on it')
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
2016 Audi A4
This car has 23 miles on it
# 2.通过方法修改属性的值
# 使用方法更新属性的值,将值传递给一个方法,由它在内部进行更新,无需直接访问属性,
# 案例:
class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性'''
self.make = make
self.model = model
self.year = year
'''添加一个属性,初始值总是为0'''
self.odometer_reading = 0
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
'''打印一套指出汽车里程的消息'''
print("This car has " + str(self.odometer_reading) + ' miles on it')
def update_odometer(self,mileage):
'''将里程表读数设置为指定的值'''
self.odometer_reading = mileage
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(23)
my_new_car.read_odometer()
2016 Audi A4
This car has 23 miles on it
# 案例2
class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性'''
self.make = make
self.model = model
self.year = year
'''添加一个属性,初始值总是为20'''
self.odometer_reading = 20
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
'''打印一套指出汽车里程的消息'''
print("This car has " + str(self.odometer_reading) + ' miles on it' )
def update_odometer(self,mileage):
'''
将里程表读数设置为指定的值
禁止将里程表读数往回调
'''
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(15)
my_new_car.read_odometer()
2016 Audi A4
You can't roll back an odometer!
This car has 20 miles on it
# 3.通过方法对属性的值进行递增
# 有时需要将属性值递增特定的量,而不是将其设置为全新的值
# 案例:
class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性'''
self.make = make
self.model = model
self.year = year
'''添加一个属性,初始值总是为0'''
self.odometer_reading = 0
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
'''打印一套指出汽车里程的消息'''
print("This car has " + str(self.odometer_reading) + ' miles on it')
def update_odometer(self,mileage):
'''
将里程表读数设置为指定的值
禁止将里程表读数往回调
'''
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles):
'''将里程表读数增加指定的量'''
self.odometer_reading += miles
my_userd_car = Car('subaru','outback',2013)
print(my_userd_car.get_descriptive_name())
my_userd_car.update_odometer(23500)
my_userd_car.read_odometer()
my_userd_car.increment_odometer(100)
my_userd_car.read_odometer()
2013 Subaru Outback
This car has 23500 miles on it
This car has 23600 miles on it
练习
# 1.就餐人数:
# 添加一个名为number_served 的属性,并将其默认值设置为 0 。根据这个类创建一个名为 restaurant 的实
# 例,打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它添加一个名为 set_number_served() 的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
# 添加一个名为 increment_number_served() 的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就
# 餐人数。
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name = restaurant_name.title()
self.cuisine_type = cuisine_type
self.number_served = 0
print(self.restaurant_name + " server wonderful " + self.cuisine_type + ".")
def describe_restaurant(self):
print("How many people are in restaurant?"+ '\t'+ str(self.number_served))
def open_restaurant(self):
print(self.restaurant_name + " is open. Come on in!" )
print("The numbers:" + self.number_served)
def set_number_served(self,number):
self.number_served = number
def increment_number_served(self,add_number):
self.number_served += add_number
restaurant = Restaurant('the mean queen', 'pizza')
restaurant.describe_restaurant()
restaurant.set_number_served(10)
restaurant.describe_restaurant()
restaurant.increment_number_served(10)
restaurant.describe_restaurant()
The Mean Queen server wonderful pizza.
How many people are in restaurant? 0
How many people are in restaurant? 10
How many people are in restaurant? 20
# 2.尝试登录次数
# User 类中,添加一个名为 login_attempts 的属性。编写一个名为 increment_login_attempts() 的方法,
# 它将属性 login_attempts 的值加 1 。再编写一个名为 reset_login_attempts() 的方法,它将属性 login_attempts 的值重置为 0 。
# 根据 User 类创建一个实例,再调用方法 increment_login_attempts() 多次。打印属性 login_attempts 的值,确认它被正确地递增;然后,调用方
# 法 reset_login_attempts() ,并再次打印属性 login_attempts 的值,确认它被重置为 0 。
class User():
'''每个与类关联的方法调用都自动传递实参self,它是指向实例本身的引用,让实例能够访问类中的属性和方法'''
def __init__(self,first_name,last_name,username,email,location):
'''获取存储在形参中的值,并存储到变量中,然后该变量关联到当前创建的实例中'''
'''以self为前缀的变量都可供类中的所有方法使用'''
self.first_name = first_name
self.last_name = last_name
self.username = username.title()
self.email = email
self.location = location
self.login_attempts = 1
def describe_user(self):
print("姓名:" +self.first_name + self.last_name)
print("用户名:" + self.username)
print("邮件:" + self.email)
print("地址:" + self.location)
print("登录次数:\t" + str(self.login_attempts))
def greet_user(self):
print("欢迎尊敬的用户:" + self.username +"!" +"\n" )
def increment_login_attempts(self):
self.login_attempts += 1
def reset_login_attempts(self):
self.login_attempts = 0
users = User('zhang','hangqi','dog','zhanghanqi@qq.com','北京东城')
users.increment_login_attempts()
users.increment_login_attempts()
users.increment_login_attempts()
users.increment_login_attempts()
users.increment_login_attempts()
users.describe_user()
print("Count:\t" + str(users.login_attempts))
users.reset_login_attempts()
print("Count:\t" + str(users.login_attempts))
姓名:zhanghangqi
用户名:Dog
邮件:zhanghanqi@qq.com
地址:北京东城
登录次数: 6
Count: 6
Count: 0
Python 使用类和实例的更多相关文章
- python基础——类和实例
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...
- Python - 001 - 类与实例间属性的理解
Python是个很灵活的语言,光看它的类和实例间属性的访问机制就可以看出这一点,不过这一点还真的不好理解,做了些测试之后我的理解是这样的: 实例在访问class属性时,先检索自己的names, 如果有 ...
- python之---类和实例
类和实例: 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但 ...
- python基础-----类和实例
在python中,首字母大写的名称指的是类,这个类定义中括号的内容是空的. 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板而实例是根据类创建出来的一个个具体 ...
- Python面向对象-类、实例的绑定属性、绑定方法和__slots__
绑定属性 从之前的文章中,我们知道python是动态语言——实例可以绑定任意属性. 那如果实例绑定的属性和类的属性名一样的话,会是什么情况呢? >>> class Student(o ...
- python学习|类和实例
什么叫实例对象呢?大家可以想象一下,[类]就像工厂的模具,以它为模板,造出来的成千上万的产品,才是被我们消费.购买.使用,真正融入我们生活的东西.这些产品,在Python中就叫[实例对象]. 往深了说 ...
- python tips:类与实例的属性问题
实例是具象化的类,它可以作为类访问所有静态绑定到类上的属性,包括类变量与方法,也可以作为实例访问动态绑定到实例上的属性. 实例1: class A: work = list("hello&q ...
- python面向对象--类和实例的认识
'''1.数据属性 2.函数属性''' #创建一个类class Chinese: "这是一个中国人的类" #类属性 money=4000 #注意类和对象均用点来访问自己的属性 de ...
- python 创建类的实例对象
# -*- coding: UTF-8 -*- class Employee: def __init__(self, name, salary): self.name = name self.sala ...
- Python学习(七)面向对象 ——类和实例
Python 面向对象 —— 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...
随机推荐
- ideal中热部署JRebal的设置
1.ideal中安装插件: 2.打开网址:https://www.guidgen.com/ 打开链接获取新的GUID码 3.网址和UUID码拼接:http://127.0.0.1:8888/ca3 ...
- Vscode 界面语言换成中文
作为编译器,Visual Studio Code是非常多能化的,但是界面英文对于我这种菜鸟新手造成了很大的困扰. 所以切换成中文更方便. Ctrl+shift+x 在左侧出现"扩展&qu ...
- Python学习笔记--元组+字符串
元组 元组一旦定义完成,就不能再被修改 同样,元组也可以进行嵌套操作 当然,若是在元组里面嵌套一个list,那么list里面的元素是可以进行修改的! 案例: 实现: 字符串 查找索引值: 字符串替换: ...
- Typora编辑区域空白过大问题
参考博客:https://blog.csdn.net/m0_55485287/article/details/115207178 在哪个文件编辑? 1.找到使用的主题,打开主题文件夹 2.找到对应的c ...
- Nacos与OpenFeign开发
目录 1.前言 2.生产者 3.消费者 4.扩展 1.前言 我的话是微服务B调用微服务A的controller层 2.生产者 微服务A请求接口如下: @GetMapping("/listUn ...
- 利用selenium爬取前程无忧招聘数据
1.背景介绍 selenium通过驱动浏览器,模拟浏览器的操作,进而爬取数据.此外,还需要安装浏览器驱动,相关步骤自行解决. 2.导入库 import csv import random import ...
- 云原生K8S精选的分布式可靠的键值存储etcd原理和实践
@ 目录 概述 定义 应用场景 特性 为何使用etcd 术语 架构 原理 读操作 写操作 日志复制 部署 单示例快速部署 多实例集群部署 静态 etcd 动态发现 常见命令 概述 定义 etcd 官网 ...
- flutter widget---->Spacer
如果你想灵活控制Flex容器(Row, Column)中子组件中的间隔,可以考虑使用Spacer.下面以Row为例子,来为它的子组件添加间距. use Spacer import 'package:f ...
- java 实现文件夹上传(springBoot 框架)
有时我们后台管理等服务可能会有这样一个简单需求,就是根据文件夹将整个文件夹下的所有资源都上传到我们的服务器上,本人也是搜索了大量资料,最终以最简单便捷的方式实现该功能,具体操作步骤如下 一.前端如何设 ...
- gulp中解决es5转es6的方法
1:安装配置文件: cnpm i gulp-babel@7 babel-core -D (@7是因为要使 "gulp-babel": "^7.0.1" 与&q ...