• Python中的类


    Python和Java都是面向对象的语言,对象从类中获取,类指的是同一类具有相同特征的事物,比如拉布拉多,柯基,哈士奇,它们都是狗,具有狗的相同特征,所以可以被归为一类Dog,Python中类的使用与Java中有些不同。

    一、创建类

    创建一个Dog类

    class Dog():
        def __init__(self,name,age,color):
            self.name=name
            self.age=age
            self.color=color
        
        def run(self):
           self.name +" run."
           
        def update_age(self,age):
            self.age=age
            
        def print_info(self):
            print (self.name + ", age:" + self.age + ", color:" + self.color)

    1、方法__init__()

    相当于java中的构造方法,进行初始化的工作,self参数类似于java中的this关键字,selft会自动传递到当前创建的对象中,所以在创建dog对象时不需要传递。在Python类中,也可以不显示的声明__init__方法,如下例

    class Cat():
        name="mikyi"
        
        def set_name(self,name):
            self.name=name
            
        def get_name(self):
            return self.name
                   
    cat=Cat()
    
    print(Cat.name)
    print(cat.name)
    print(cat.get_name())
    
    cat.set_name("xiaomaomi")
    print(Cat.name)
    print(cat.name)
    print(cat.get_name())

    上述示例中有一点需要注意,在类中直接声明的变量,使用类名.属性名方式获取到的值始终为初始化的值,但如果类中没有属性,只是在__init__方法中通过self.方法设置的属性,则不能通过类型.方式获取该属性,如上述Dog类中,有name,age,color属性,如下操作将会抛出异常

    dog=('name','12','yellow')
    print(Dog.name)

    2、对于普通方法,如run,update_age,print_info,由于使用到了当前对象的属性,也需要传递self,若未传递,在调用时会出现如下异常

    二、创建实例并访问属性

    创建实例

    huskie=Dog('erha','2','black and white')

    通过“对象名.属性名”访问属性

    huskie=Dog('erha','2','black and white')
    print (huskie.name)

    三、访问方法

    huskie=Dog('erha','2','black and white')
    huskie.print_info()

    四、创建多个实例

    huskie=Dog('erha','2','black and white')
    labrador=Dog('labuladuo','3','black')
    corgi=Dog('keji','4','yellow')

    五、修改属性值

    1、直接修改属性

    huskie=Dog('erha','2','black and white')
    huskie.age='7'
    huskie.print_info()

    2、通过方法修改

    上述Dog类中update_age()即为修改属性age的方法,对属性进行修改时,建议使用这种方式处理

    huskie=Dog('erha','2','black and white')
    huskie.update_age('5')
    huskie.print_info()

    六、继承

    一个类继承另外一个类时,将自动获得另一个类的所有属性和方法,原有的类称为父类,新类称为子类。子类还可以定义自己的属性和方法

    犬中有救生犬,导盲犬等,救生犬和导盲犬分别又可以看做是一个类,如导盲犬类

    class GuideDog(Dog):
        def __init__(self,name,age,color,protect_master):
            super().__init__(name,age,color)
            self.protect_master=protect_master
        
        def protect(self):
            print (self.name +" protect its master " + self.protect_master + " cross the road.")
            
    
    guideDog=GuideDog('xiaobai','5','white','auth')
    guideDog.print_info()
    guideDog.protect()

    1、重写父类方法

    在GuideDog类中重写父类run方法

    class GuideDog(Dog):
        def __init__(self,name,age,color,protect_master):
            super().__init__(name,age,color)
            self.protect_master=protect_master
        
        def protect(self):
            print (self.name +" protect its master " + self.protect_master + " cross the road.")
        
        def run(self):
            print(self.name + " run slowly.")
            
            
    guideDog=GuideDog('xiaobai','5','white','auth')
    guideDog.run()

    调用run函数,输出的为子类中的方法的打印

    2、将实例用作属性

    添加一个宠物狗市场,并且打印宠物狗的售卖信息

    class DogPetMarket():
        def __init__(self,dog,price):
            self.dog=dog
            self.price=price
        
        def get_info(self):
             print (self.dog.name + ", age:" + self.dog.age + ", color:" + 
                    self.dog.color +", price: " + self.price)
    
    
    huskie=Dog('erha','1','blick and white')
    dogPetMarket=DogPetMarket(huskie,'100$')
    dogPetMarket.get_info()

  • 相关阅读:
    navicat的快捷键
    NoSQL Redis的学习笔记
    awk的使用
    把自己的电脑做服务器发布tomcat的项目外网访问
    linux系统备份
    系统自动化配置和管理工具:SaltStack
    RSync实现文件备份同步
    传送文件
    面试题
    闭包closure
  • 原文地址:https://www.cnblogs.com/qq931399960/p/11111400.html
Copyright © 2020-2023  润新知