• Python 类 初学者笔记


    面对象编程:编写表现世界中的事物和景象的类,并基于这些类创建对象,被创建的对象称为实例化。

    创建类

    class Dog():    #Python中类名称中的首字母要大写
    
        def __init__(self, name, age):#我是一个构造器
        #类中的函数都称为【方法】,init__()是个特殊的方法,每当我们根据Dog类创建实例时,Python都会自动的运行它
        #self必不可少且必须位于其它形参前面,
        # 每个与类相关的方法调用都自动传入self,self让实例能够访问类中的属性和方法
    
            self.name = name#以【self】为前缀的变量,可供类中所有【方法】使用,也可通过【实例】访问,我们称其为【属性】
            self.age = age
    
        def sit(self):
    #self会自动传递name与age
            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() + ".")#__init__并未显式的包含return语句,但Python自动返回了这条小狗的实例(name与age)
    print("My dog is " + str(my_dog.age) + " years old.")
    #print(my_dog.name + my_dog.age)调用属性相加 my_dog.sit()#实例中调用方法,Python在类Dog中查找方法sit()并运行其代码 my_dog.roll_over()

    根据类创建多个实例 

    my_dog = Dog('willie', 6)
    your_dog = Dog('lucy', 3)
    print("My dog's name is " + my_dog.name.title() + ".")
    print("My dog is " + str(my_dog.age) + " years old.")#实例my_dog的打印语句
    print("You dog's name is " + your_dog.name.title() + ".")#实例your_dog的打印语句
    print("You dog is " + str(your_dog.age) + " years old.")
    

     属性

    类中的每个属性都必须有初始值(可以是0和空字符)

    class Dog():    
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
            self.day = 0#属性day的默认值为0
    
      def update_a(self, new):
        '''修改属性值的方法'''
            self.day = new               
            '''禁止任何人把年龄往回调'''   
            #if new >= self.day :
               # self.day = new    
           #else :
                #print("返老还童?")
            '''对属性值进行递增'''
          #  self.day += new        
    my_dog = Dog('willie',6) 
    """修改属性值"""
    my_dog.day = 18#通过实例直接修改
    my_dog.update_a(18)#通过方法修改
    
    
                
    

     继承

    一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。

    创建子类时父类必须包含在当前文件中,且位于子类之前,

    可使用 super() 将父类与子类关联起来

    from car import Car
    
    class ElectricCar(Car):#定义子类时必须在括号内指定父类名称
    
        def __init__(self, manufacturer, model, year):
            super().__init__(manufacturer, model, year)#让Pyton调用父类的方法__init__(),使ElecticCar包含父类的所有属性
         
    
    my_tesla = ElectricCar('teska', 'models', 2016)#使用子类创建实例
    print(my_tesla.get_descriptive_name())
    

     父类方法重写(覆盖)

    在子类中定义一个与父类方法同名的方法,则Python将不会考虑父类中的这个方法,而只关注子类中定义的相应方法

    将类作为属性的实例调用:

    from car import Car
    
    class Battery():
    
        def __init__(self, battery_size=60):
            self.battery_size = battery_size
    
        def describe_battery(self):
            print("This car has a " + str(self.battery_size) + "-kWh battery.")  
            
        def get_range(self):
            if self.battery_size == 60:
                range = 140
            elif self.battery_size == 85:
                range = 185   
            message = "This car can go approximately " + str(range)
            message += " miles on a full charge."
            print(message)
            
    class ElectricCar(Car):
    
        def __init__(self, manufacturer, model, year):
            super().__init__(manufacturer, model, year)
            self.battery = Battery()#将类用作属性
    
    my_tesla = ElectricCar('teska', 'models', 2016)
    my_tesla.battery.describe_battery()#将类用作属性的实例调用
    

    导入类模块

    从一个模块中导入多个类 from car import Car, ElecticCar 

    导入整个模块

    因为要在类名前加上模块名所以不会发生覆盖,所以需要从一个模块导入很多类时,最好导入整个模块使用。

    import car
    
    my_car = car.Car('audi', 'a4', 2015)#使用car模块中的类创建实例,需要在类前加上模块名
    print(my_car.get_descriptive_name())
    my_car = car.ElectricCar('tesla', 'roadster', '2016')
    print(my_car.get_descriptive_name)
    

     使用Python标准库collections创建有序字典

    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() + ".")
    
    from random import randint#一个很有意思的库随机生成数字
    
    class Die():
        '''一个会改变面的骰子'''
        def __init__(self, sides=6):
                '''控制面'''
            self.sides = sides#sides
    
        def roll_die(self):
                 '''转骰子操作'''
            for a in range(0,10):#控制循环
                x = randint(1, self.sides)
                print(x)
    
    
    a = Die()
    a.roll_die()
    b = Die()
    b.sides = 10#改变骰子面数
    b.roll_die()
        
    

    工作流程:

    开始时应该让代码结构尽可能简单,尽可能在在一个文件中完成所有工作,再将类移到独立的模块中。

    每个模块应包含一段描述,对于其中的类能做什么也应有所描述

    在类中使用一个空行来分隔方法;在模块中使用两个空格来分隔类

  • 相关阅读:
    jsonp
    web系统中上下移动功能的实现
    重载的目的是什么
    重写和重载
    final和static
    static的应用
    shiro认证
    做阉割版Salesforce难成伟大的TOB企业
    Go语言在国产CPU平台上应用前景的探索与思考
    101 More Security Best Practices for Kubernetes
  • 原文地址:https://www.cnblogs.com/MR---Zhao/p/12342177.html
Copyright © 2020-2023  润新知