《Python编程:从入门到实践》第九章类笔记+动手试一试(2)

创建类和实用类

  • 9.2.1Car类
  • 9.2.2给属性指定默认值
  • 9.2.3修改属性的值
    • 1.直接修改属性的值
    • 2.通过方法修改属性的值
  • 9.1总结代码
  • 动手试一试
    • 9-4就餐人数
    • 9-5尝试登陆次数

除了9.1的代码可以运行的起来,其他的我没有试过,而且有些代码是简写,我打一边单纯是为了理解。

这是我看python编程:从入门到实践的笔记,这本书上没有和课后练习的笔记,动手试试那里的代码为本人原创,怕到时有人有我盗书咋的咋的,虽然我的文章基本没什么人看。

9.2.1Car类

#car.py

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())
-------------------------------------------------------
类 汽车():
    定义 初始化(自己,品牌,型号,年份):
        自己.品牌 = 品牌
        自己.型号 = 型号
        自己.年份 = 年份

    定义 获得描述性名称(自己):
        长名称 =(自己.年份)+' '+自己.品牌+'\
 '+自己.型号
        返回 长名称.标题()
我的新的汽车 = 汽车('奥迪','a4',2016)
打印(我的新的汽车.获得描叙性名称())

9.2.2给属性指定默认值

我觉得我翻译的不标准,每个人的理解都不太一样,我之前以为作者的model想表达的是型号,结果是车的模型。。。emmm反正只是个例子无需在意,用出来的就行。

class Car():
    def __init__(self,make,model,year):
        '''初始化描述汽车的属性'''
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0
        
    def get_descriptive_name(self):
        --snip--
    
    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()
---------------------------------------------------------
__init__初始化
self自己,(自己的)通常的行为方式,本来面目,惯常心态。。。
make v.制造,做。n.品牌,型号。
model n.模型,样式,型
odometer reading里程表读数
get descriptive name获取描叙性名称
snip剪,剪断,剪开
read odometer读取里程表
miles英里

后半部分的翻译可以注释掉

9.2.3修改属性的值

1.直接修改属性的值

这一步是把里程表读数设置为23

class Car():
    --snip--
              
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()
---------------------------------------------------------
__init__初始化
self自己,(自己的)通常的行为方式,本来面目,惯常心态。。。
make v.制造,做。n.品牌,型号。
model n.模型,样式,型
odometer reading里程表读数
get descriptive name获取描叙性名称
snip剪,剪断,剪开
read odometer读取里程表
miles英里

2.通过方法修改属性的值

这种方可可以不需要直接访问属性就可以将值传递给一个方法。

class Car():
    --snip--
    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()
---------------------------------------------------------
__init__初始化
self自己,(自己的)通常的行为方式,本来面目,惯常心态。。。
make v.制造,做。n.品牌,型号。
model n.模型,样式,型
odometer reading里程表读数
get descriptive name获取描叙性名称
snip剪,剪断,剪开
read odometer读取里程表
miles英里
mileage里程
update odometer 更新里程表

对方法update_odometer()进行扩展,使其在修改里程表读数时做些额外的工作。下面来添加一些逻辑,禁止任何人将里程表读数往回调:

class Car():
    --snip--
    def update_odometer(self,mileage):
        '''
        将里程表读数设置为指定的值
        禁止将里程表读数往回调
        '''
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print('You can`t roll back an odometer!')
            '''你不能退回里程表'''
---------------------------------------------------------
__init__初始化
self自己,(自己的)通常的行为方式,本来面目,惯常心态。。。
make v.制造,做。n.品牌,型号。
model n.模型,样式,型
odometer reading里程表读数
get descriptive name获取描叙性名称
snip剪,剪断,剪开
read odometer读取里程表
miles英里
mileage里程
update odometer 更新里程表

3.通过方法堆属性的值进行递增

class Car():
    --snip--
    def update_odometer(self,mileage):
        --snip--
    def increment_odometer(self,miles):
        '''将里程表读数增加指定的量'''
        self.odometer_reading += miles
        
my_used_car = Car('subaru','outback',2013)
print(my_used_car.get_descriptive_name())
my_used_car.update_odometer(23500)
my_used_car.read_odometer()
my_used_car.increment_odometer(100)
my_used_car.read_odometer()
---------------------------------------------------------
__init__初始化
self自己,(自己的)通常的行为方式,本来面目,惯常心态。。。
make v.制造,做。n.品牌,型号。
model n.模型,样式,型
odometer reading里程表读数
get descriptive name获取描叙性名称
snip剪,剪断,剪开
read odometer读取里程表
miles英里
mileage里程
update odometer 更新里程表
increment_odometer里程表增量

9.1总结代码

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
        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_used_car = Car('subaru','outback',2013)
print(my_used_car.get_descriptive_name())
my_used_car.update_odometer(23500)
my_used_car.read_odometer()
my_used_car.increment_odometer(100)
my_used_car.read_odometer()
##---------------------------------------------------------
##__init__初始化
##self自己,(自己的)通常的行为方式,本来面目,惯常心态。。。
##make v.制造,做。n.品牌,型号。
##model n.模型,样式,型
##odometer reading里程表读数
##get descriptive name获取描叙性名称
##snip剪,剪断,剪开
##read odometer读取里程表
##miles英里
##mileage里程
##update odometer 更新里程表
##increment_odometer里程表增量

动手试一试

9-4就餐人数

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 0
        
    def describe_restaurant(self):
        print('My restaurant`s name is '\
      +self.restaurant_name.title())
        print('My restaurant makes '+self.cuisine_type)
        
    def open_restaurant(self):
        print("The "+self.restaurant_name.title()\
              +" restaurant is open.")

    def set_number_served(self,number_served):
        self.number_served = number_served
        print('number_served: '+str(self.number_served))
            
    def increment_number_served(self,people):
        self.number_served += people
        print('number_served: '+str(self.number_served))
        
my_restaurant = Restaurant('yummy','Western-style food')
my_restaurant.describe_restaurant()
my_restaurant.open_restaurant()
my_restaurant.set_number_served(15)
my_restaurant.increment_number_served(20)
###---------------------------------------------------------------
###number_served服务人数
###set_number_served设置服务人数
###increment_number_served服务人数增加

9-5尝试登陆次数

class User():
    def __init__(user,first_name,last_name,gender,age,birthday):
        user.first_name= first_name
        user.last_name = last_name
        user.gender = gender
        user.age = age
        user.birthday = birthday
        user.login_attempts = 0
        
    def describe_user(user):
        print("First name: "+user.first_name.title())
        print("Last name: "+user.last_name.title())
        print("Gender: "+user.gender)
        print("Age:"+str(user.age))
        print("Your birthday: "+str(user.birthday))
        
    def greet_user(user):
        print("Hello "+user.first_name.title(),'Welcome to the world \
of Python.')

    def increment_login_attempts(user,login_attempts):
        user.login_attempts = login_attempts
        user.login_attempts += 1
        print("Login times: "+str(user.login_attempts))

    def reset_login_attempts(user):
        user.login_attempts = 0
        print("The number of logins has been reset! "\
              +str(user.login_attempts))
        
user_profile = User('angel','devil','girl','16','9.2')
user_profile.greet_user()
user_profile.describe_user()
for i in range(5):
    user_profile.increment_login_attempts(i)
user_profile.reset_login_attempts()
#--------------------------------------------------------------
#login attempts登陆尝试
#increment login attempts增加登录尝试次数
#reset login attempts重置登陆尝试
#login times登录次数
#The number of logins has been reset!已经充值登录次数

这些是我理解做出来的,如果理解错误那就不对了,仅供参考

你可能感兴趣的:(我啃的python书,python)