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 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...
随机推荐
- 安装Win11需要网络才能下一步怎么跳过
1.先Shift+F10打开命令提示符 2.运行C:\Windows\System32\oobe\BypassNRO.cmd 3.自动重启来到联网这一步,多了一个没有网络的选项,进入.
- Sleuth 使用
sleuth是spring cloud中日志链(调用链解决方案),自动添加traceId,spanId. sleuth包也可单独引入,和其它藕合度小.sleuth + zipkin 实现APM管理. ...
- 关于python print函数format 格式化
关于python print函数format 格式化 Your Guide to the Python print() Function https://realpython.com/python- ...
- 盘点10个最受欢迎IntelliJ IDEA主题,必有一款适合你!
选择一款适合自己的主题,这样每天工作才不会累!下面给大家精选了一批优秀的主题,并配上案例截图.如果有你喜欢的,那就赶紧去下载吧! Darcula 这是IntelliJ IDEA默认的暗色主题,适合长时 ...
- Python学习笔记--函数来啦!
函数 函数,就是组织好的,可重复使用的,用来实现特定功能的代码块 实际的小案例:不使用内置函数len,利用函数知识计算出字符串的长度 实现: 函数的基础定义语法 案例:自动查核酸 实现: 函数的传入参 ...
- 关于IDEA新建Maven项目时,会卡死,无法实现新建问题的具体解决
对于问题的描述 在进行新建项目时,突然就出现了选择好一切之后,点击CREATE后,直接卡死停滞(对于一个菜菜来说,只能通过电脑重启来改变一下它无法动弹的状态了) 对于该问题的解决 解决的话,具体步骤如 ...
- RBAC学习(一)
0.前提 :用户只有一个直属部门,但角色可以关联多个部门 有一种情况就不太适用:比如说地区经理是一个角色,张三是北京市地区经理,他在组织架构中的直属部门是华北大区,然后一个黑龙江的销售李四提一个折扣申 ...
- Insecure Randomness 不安全的随机数
Insecure Randomness Abstract 标准的伪随机数生成器不能抵挡各种加密攻击. Explanation 在对安全性要求较高的环境中,使用一个能产生可预测数值的函数作为随机数据源, ...
- 太坑了,我竟然从RocketMQ源码中扒出了7种导致消息重复消费的原因
大家好,我是三友~~ 在众多关于MQ的面试八股文中有这么一道题,"如何保证MQ消息消费的幂等性". 为什么需要保证幂等性呢?是因为消息会重复消费. 为什么消息会重复消费? 明明已经 ...
- WordPress回复/评论本文可见
给WordPress添加一个实用的小功能,那就是回复可见,评论文章才能见到隐藏内容. 在主题目录下找到functions.php文件,在合适位置添加下方的代码: // 回复可见 function re ...