Python从入门到实践(八)——类


前言

面向对象的编程是最有效的编程方法之一,编写类时,定义一大类的对象都有的通用行为,基于类创造对象时,每个对象都有这样的通用行为。
根据类创建对象被称为实例化。


一、类

1.创建类

类的初始化 init()
init()函数,左右有两条下划线。每当创建实例时,python都会运行它,init()函数第一个形参一定是self,这个形参不需要手动输入,python会自动与输入。每个与类相关的函数都必须有self。让实例能够访问类中的属性和方法。
init函数没有函数return,但是python会自动返回一个表示这个类的实例。通常情况下,我们将首字母大写的当作类,首字母小写的当作实例。
创建一个实例后,若要想对实例进行操作,需要使用句点表示法。

2.使用类和实例

给属性指定默认值
类中的每个属性都要有初始值,设置默认值时,可以在init函数中进行指定默认值,这样设定后,就无需为他的初始值提供实参。

修改属性的值
1.直接改变属性的值:用句点表示法来直接改变init函数中设定的默认值。
2.通过方法改变属性的值:在类中定义一个改变默认值的函数。然后用据点表示法引用函数。
3.通过方法对默认值进行递增:也是一个函数。

3.继承

创建子类实例时,首先要完成的是对父类的对象进行赋值。
创建子类时,父类必须在当前文件夹中,并且在子类的前面。
定义子类时,必须在括号里指定父类的名称,init函数包含实例所需的信息。
super()是一个特殊的函数,将父类与子类连接起来,并调用父类的init函数。

给子类定义属性和方法
子类继承父类的属性和方法后,在继续定义可以区分父类与子类的新方法与属性。

重写父类的方法
当子类中需要改写父类的方法时,只需要在类内部重写即可。

将实例作为属性
针对一个物体而言,如果将它身上的所有属性与方法都放在一个类中,那类就显得非常臃肿,我们可以把这个物体的某部分提取出来,单独作为一个类存在。而在这个物体的类中,可以将部分类的实例作为属性。例如,电动车中有电池,将电池作为一个新类,而在电动中加一个电池的新属性,这个属性等于电池这个类的实例化。
这样做时,引用电池类中的函数时需要仔细思考,一般有好几个句点表达式。

模拟实物
对一个实物进行模拟时,我们要仔细思考,某个属性是属于那一类的属性。

4.导入类

python允许将类存储在模块里,然后在主程序中导入所需要的模块。

导入单个类
from XXX import XXX

导入多个类时,用逗号分割各个类
from XXX import XXX,XXX

导入整个模块
imort XXX

5.python标准库

python标准库中有许多已经编写好的类与函数,我们可以直接导入模块来调用这些函数。

二、代码

1.第一题到第九题

#餐馆
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('restaurant name : '+self.restaurant_name)
        print('cuisine type : '+self.cuisine_type)

    def open_restaurant(self):
        print('this restaurant is opining')
    
    def set_number_served(self):
        self.number_served=int(input('修改餐厅人数为: '))
        print(self.number_served)

    def increment_number_served(self,num):
        self.number_served+=int(num)
        print(self.number_served)

restaurant=Restaurant('zhangsanzhijia','Chinese')
restaurant.describe_restaurant()
restaurant.open_restaurant()
#三家餐馆
restaurant_1=Restaurant('lisizhijai','Amercian')
restaurant_2=Restaurant('wangwuzhijia',"France")
restaurant.describe_restaurant()
restaurant.open_restaurant()
restaurant_1.describe_restaurant()
restaurant_1.open_restaurant()
restaurant_2.describe_restaurant()
restaurant_2.open_restaurant()
#用户
class User():
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name
        self.login_attempts=0

    def describe_user(self):
        print('the name of user is '+self.first_name+' '+self.last_name)

    def greet_user(self):
        print('hi! '+self.first_name+' '+self.last_name)

    def increment_login_attempts(self):
        self.login_attempts+=1
        print(self.login_attempts)
    
    def reset_login_attempts(self):
        self.login_attempts=0
        print(self.login_attempts)

user=User('zhang','san')
user.describe_user()
user.greet_user()

#就餐人数
restaurant.set_number_served()
restaurant.increment_number_served(5)
#尝试登陆次数

user.increment_login_attempts()
user.increment_login_attempts()
user.increment_login_attempts()
user.reset_login_attempts()

#冰激凌小店
class Icecream(Restaurant):
    def __init__(self, restaurant_name, cuisine_type):
        super().__init__(restaurant_name, cuisine_type)
        self.flavors=['chocolate','strawberry','milk']

    def show_flavors(self):
        for flavor in self.flavors:
            print(flavor)
icecream=Icecream('icecream','icecream')
icecream.show_flavors()

#权限
class Privileges():
    def __init__(self):
        self.privileges=['can add port','can delete port','can ban user']
    def show_privileges(self):
        for privilege in self.privileges:
            print(privilege)
#管理员
class Admin(User):
    def __init__(self, first_name, last_name):
        super().__init__(first_name, last_name)
        #self.privileges=['can add port','can delete port','can ban user']
        self.privileges=Privileges()
    #def show_privileges(self):
        #for privilege in self.privileges:
            #print(privilege)
admin=Admin('zhang','san')
#admin.show_privileges()
admin.privileges.show_privileges()

#电瓶升级
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 cannot roll back an odometer')

    def increment_odometer(self,mile):
        self.odometer_reading+=mile

class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.batter_size=70

    def describe_battery_size(self):
        print('this car has a '+self.batter_size+'-kw battery')

    def get_range(self):
        if self.batter_size==70:
            range=240
        elif self.batter_size==85:
            range=270
        message='this car can go approximately '+str(range)
        message+=' miles on a full charge'
        print(message)
    def upgrade_battery(self):
        if self.batter_size!=85:
            self.batter_size=85

electiccar=ElectricCar('qq','qq','5')
electiccar.get_range()
electiccar.upgrade_battery()
electiccar.get_range()

2.第十题到第十四题

前置文件_9_4与_9_3:

#用户
class User():
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name
        self.login_attempts=0

    def describe_user(self):
        print('the name of user is '+self.first_name+' '+self.last_name)

    def greet_user(self):
        print('hi! '+self.first_name+' '+self.last_name)

    def increment_login_attempts(self):
        self.login_attempts+=1
        print(self.login_attempts)
    
    def reset_login_attempts(self):
        self.login_attempts=0
        print(self.login_attempts)
from _9_4 import User
#餐馆
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('restaurant name : '+self.restaurant_name)
        print('cuisine type : '+self.cuisine_type)

    def open_restaurant(self):
        print('this restaurant is opining')
    
    def set_number_served(self):
        self.number_served=int(input('修改餐厅人数为: '))
        print(self.number_served)

    def increment_number_served(self,num):
        self.number_served+=int(num)
        print(self.number_served)

#冰激凌点
class Icecream(Restaurant):
    def __init__(self, restaurant_name, cuisine_type):
        super().__init__(restaurant_name, cuisine_type)
        self.flavors=['chocolate','strawberry','milk']

    def show_flavors(self):
        for flavor in self.flavors:
            print(flavor)
#权限
class Privileges():
    def __init__(self):
        self.privileges=['can add port','can delete port','can ban user']
    def show_privileges(self):
        for privilege in self.privileges:
            print(privilege)
#管理员
class Admin(User):
    def __init__(self, first_name, last_name):
        super().__init__(first_name, last_name)
        #self.privileges=['can add port','can delete port','can ban user']
        self.privileges=Privileges()
    #def show_privileges(self):
        #for privilege in self.privileges:
            #print(privilege)
#汽车
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 cannot roll back an odometer')

    def increment_odometer(self,mile):
        self.odometer_reading+=mile
#电动车
class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.batter_size=70

    def describe_battery_size(self):
        print('this car has a '+self.batter_size+'-kw battery')

    def get_range(self):
        if self.batter_size==70:
            range=240
        elif self.batter_size==85:
            range=270
        message='this car can go approximately '+str(range)
        message+=' miles on a full charge'
        print(message)
    def upgrade_battery(self):
        if self.batter_size!=85:
            self.batter_size=85

程序

from _9_3 import Restaurant
from _9_3 import Admin
from collections import OrderedDict
from random import randint

#导入Restaurant
restaurants=Restaurant('zhangsan','Chinese')
restaurants.describe_restaurant()
#导入Admin _9_4中存放正User
admin=Admin('zhang','san')
admin.describe_user()
admin.privileges.show_privileges()
#python 标准库
favourite_language=OrderedDict()
favourite_language['zhangsan']='c'
favourite_language['lisi']='python'
favourite_language['wangwu']='java'
favourite_language['xiaoming']='javascript'
for name,language in favourite_language.items():
    print(name+"'s favorite language is "+language)
#骰子
class Die:
    def __init__(self,size):
        self.size=size

    def roll_die(self):
        x=randint(1,self.size)
        print(x)
die=Die(6)
die.roll_die()


总结

本章学习的关于类的知识有:
创建类,修改类的属性,继承类,导入类等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值