美文网首页python进阶Java-Python-Django社区程序员
【day 7】python编程:从入门到实践学习笔记-类(末附练

【day 7】python编程:从入门到实践学习笔记-类(末附练

作者: 苍云横渡 | 来源:发表于2018-03-19 09:24 被阅读55次

    学习笔记目录
    【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型
    【day 2】python编程:从入门到实践学习笔记-列表以及其操作
    【day 3】python编程:从入门到实践学习笔记-if 语句(末附练习答案代码)
    【day 4】python编程:从入门到实践学习笔记-字典(末附练习答案代码)
    【day 5】python编程:从入门到实践学习笔记-用户输入和while循环(末附答案代码)
    【day 6】python编程:从入门到实践学习笔记-函数(末附练习答案代码)
    【day 7】python编程:从入门到实践学习笔记-类(末附练习答案代码)
    【day 8】python编程:从入门到实践学习笔记-文件和异常(末附练习答案代码)
    【day 9】python编程:从入门到实践学习笔记-测试代码(末附练习答案代码)
    【day 10】python编程:从入门到实践学习笔记-Django入门(一)
    【day 11】python编程:从入门到实践学习笔记-Django入门(二)
    【day 12】python编程:从入门到实践学习笔记-Django入门(三)
    【day 13】python编程:从入门到实践学习笔记-Django入门(四)
    【day 14】python编程:从入门到实践学习笔记-用户账户(一)
    【day 15】python编程:从入门到实践学习笔记-用户账户(二)
    【day 16】python编程:从入门到实践学习笔记-用户账户(三)
    【day 17】python编程:从入门到实践学习笔记-设计样式和部署(一)
    【day 18】python编程:从入门到实践学习笔记-设计样式和部署(二)& 补充

    第九章

    面向对象编程时,都会遇到一个概念,,python也有这个概念,下面我们通过代码来深入了解下。

    创建和使用类

    class Dog():
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def sit(self):
            print(self.name.title() + " is now sitting.")
        def roll_over(self):
            print(self.name.title() + " rolled over!")
    
    my_dog = Dog('willie', 6)
    print("My dog's name is " + my_dog.name.title() + ".")
    print("My dog is " + str(my_dog.age) + " years old.")
    
    运行结果:
    My dog's name is Willie.
    My dog is 6 years old.
    

    class关键字:来定义一个类。类名通常首字母为大写。
    __init__方法:特殊方法,每当实例类的时候都会运行。其中的形参self必不可少,而且必须位于最前面。
    self形参:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候用不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身。

    实例的方法是指定类名以及需要传入的实参。
    要访问实例的属性或者调用方法,可使用句点表示法

    使用类和实例

    class Car():
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0 #<- here
    
        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
    

    可以看到,我们给Car类的属性指定了默认值self.odometer_reading = 0。如果要修改它,我们可以通过实例直接访问它并修改,比如:my_new_car.odometer_reading = 23。或者通过方法修改属性的值。或者通过方法对属性的值进行递增。

    class Car():
        --snip--
        #通过方法修改属性的值
        def update_odometer(self, mileage):
            self.odometer_reading = mileage
    
        #通过方法对属性的值进行递增
        def increment_odometer(self, miles):
            self.odometer_reading += miles
    

    继承

    一个类继承另一个类时,他将自动获得另一个类的所有属性和方法;原有的类称为父类,新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
    现在我们有一个Car类如下

    class Car():
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0 #<- here
    
        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
    
        def increment_odometer(self, miles):
            self.odometer_reading += miles
    

    创建子类实例时,python首先给父类所有属性赋值。
    接下来我们创建新类EleCar

    class Car():
        --snip--
    
    class ElectricCar(Car):
        def __init__(self, make, model, year):
            super().__init__(make, model, year)
    
    my_tesla = ElectricCar('tesla', 'model s', 2016)
    print(my_tesla.get_descriptive_name())
    
    运行结果:
    2016 Tesla Model S
    

    首先父类必须位于子类前面。
    super()是一个特殊函数,将父类和子类关联起来。使得可调用子类的父类的方法__init__(),让子类包父类的所有属性。
    给子类定义属性和方法没有任何限制,比如:

    class Car():
        --snip--
    
    class ElectricCar(Car):
        def __init__(self, make, model, year):
            super().__init__(make, model, year)
            self.battery_size = 70
    
        def describe_battery(self):
            print("This car has a " + str(self.battery_size) + "-kWh battery.")
    
    my_tesla = ElectricCar('tesla', 'model s', 2016)
    print(my_tesla.get_descriptive_name())
    my_tesla.describe_battery()
    
    运行结果:
    2016 Tesla Model S
    This car has a 70-kWh battery.
    

    如果需要重写父类的方法,只需定义一个与重写的父类方法同名的方法即可。
    python还可以使用其他类的实例作为自己类的属性。

    导入类

    类似函数,类也可以保存为.py文件形成模块从而进行导入。
    导入单个类:
    from model_name import class_name
    导入一个模块的多个类:
    from model_name import class_name1, class_name2
    导入一个模块所有类:
    from model_name import *
    导入整个模块:
    import model_name
    还可以在一个模块中导入另一个模块

    python标准库

    其是一组模块。模块collections中有一个类OrderedDict。字典的键值对没有顺序,但是这个类几乎和字典相同,区别只在于记录了键值对的顺序。

    from collections import OrderedDict
    
    favorite_languages = OrderedDict()
    
    favorite_languages['jen'] = 'python'
    favorite_languages['sarah'] = 'c'
    favorite_languages['edward'] = 'ruby'
    favorite_languages['phil'] = 'python'
    
    for name, language in favorite_languages.items():
        print(name.title() + "'s favorite language is " +
    language.title() + ".")
    
    运行结果:
    Jen's favorite language is Python.
    Sarah's favorite language is C.
    Edward's favorite language is Ruby.
    Phil's favorite language is Python.
    

    第九章练习答案代码
    链接:https://pan.baidu.com/s/11pZkqdJgpc9IECs2ojzWzg 密码:se5m

    相关文章

      网友评论

        本文标题:【day 7】python编程:从入门到实践学习笔记-类(末附练

        本文链接:https://www.haomeiwen.com/subject/kceyqftx.html