使用类和实例

  • 直接修改实例的属性
  • 编写方法以特定的方式进行修改
# 案例:
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 使用类和实例的更多相关文章

  1. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  2. Python - 001 - 类与实例间属性的理解

    Python是个很灵活的语言,光看它的类和实例间属性的访问机制就可以看出这一点,不过这一点还真的不好理解,做了些测试之后我的理解是这样的: 实例在访问class属性时,先检索自己的names, 如果有 ...

  3. python之---类和实例

    类和实例: 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但 ...

  4. python基础-----类和实例

    在python中,首字母大写的名称指的是类,这个类定义中括号的内容是空的. 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板而实例是根据类创建出来的一个个具体 ...

  5. Python面向对象-类、实例的绑定属性、绑定方法和__slots__

    绑定属性 从之前的文章中,我们知道python是动态语言——实例可以绑定任意属性. 那如果实例绑定的属性和类的属性名一样的话,会是什么情况呢? >>> class Student(o ...

  6. python学习|类和实例

    什么叫实例对象呢?大家可以想象一下,[类]就像工厂的模具,以它为模板,造出来的成千上万的产品,才是被我们消费.购买.使用,真正融入我们生活的东西.这些产品,在Python中就叫[实例对象]. 往深了说 ...

  7. python tips:类与实例的属性问题

    实例是具象化的类,它可以作为类访问所有静态绑定到类上的属性,包括类变量与方法,也可以作为实例访问动态绑定到实例上的属性. 实例1: class A: work = list("hello&q ...

  8. python面向对象--类和实例的认识

    '''1.数据属性 2.函数属性''' #创建一个类class Chinese: "这是一个中国人的类" #类属性 money=4000 #注意类和对象均用点来访问自己的属性 de ...

  9. python 创建类的实例对象

    # -*- coding: UTF-8 -*- class Employee: def __init__(self, name, salary): self.name = name self.sala ...

  10. Python学习(七)面向对象 ——类和实例

    Python 面向对象 —— 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...

随机推荐

  1. 【node打包缺包】Error: Can't walk dependency graph: Cannot find module 'jquery' from

    问题: 在使用node打包时,终端报错提示Error: Can't walk dependency graph: Cannot find module 'jquery' from/.../ 这个提示缺 ...

  2. SQLyog 13.1.1.0注册码证书秘钥

    注册信息: Name:(用户名随意) License Key: Professional: 8e053a86-cdd3-48ed-b5fe-94c51b3d343c Enterprise: a4668 ...

  3. samba缓存问题

    samba 在第一次登录时,会在windows上缓存着登录密码,当你重新修改samba服务端的密码, 再次登录时,windows会自动用缓存的旧密码登录,导致的登录失败.

  4. Hadoop服务启动失败

    Hadoop服务启动失败今天启动Hadoop时,终端报了一个新的错误 ```bashStarting namenodes on [192.168.19.128]192.168.19.128: ssh: ...

  5. Linux 复制时排除某文件/目录

    如果要排除/home/data目录下面的a.b.c.三个目录,同时拷贝其它所有目录,执行rsync命令yum install rsync -y #安装rsync 排除单个文件/目录rsync -avP ...

  6. Jmeter--请求结果写入文件并生成报告

    一.数据写入文件 Jmeter中监听器控件中,都可以将"所有数据写入一个文件",且文件形式有:xml\jtl\csv 在需要写入的监听器下点击"浏览"按钮,选择 ...

  7. MacOS ssh config 配置

    Host 别名 #password 注释,保存密码 HostName IP User 服务器账号#root Port 端口 IdentityFile ~/.ssh/id_rsa #指定密钥 Remot ...

  8. Linux中profile、bashrc、bash_profile之间的区别和联系(转)

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/pr ...

  9. SpringCloud微服务实战——搭建企业级开发框架(五十一):微服务安全加固—自定义Gateway拦截器实现防止SQL注入/XSS攻击

      SQL注入是常见的系统安全问题之一,用户通过特定方式向系统发送SQL脚本,可直接自定义操作系统数据库,如果系统没有对SQL注入进行拦截,那么用户甚至可以直接对数据库进行增删改查等操作.   XSS ...

  10. Cocos 引擎生态部负责人李阳:己之所欲,可施于人,希望通过生态促进国内引擎技术发展

    前言 "小小的身体,大大的能量,这个应该是我对大表姐最直接的感觉,在她娇小的身躯里蕴含了无限的精力和潜力,很像漫威里的神奇女侠,作为一个具备冒险精神的非典型程序员,大表姐热爱的体育活动都是很 ...