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()

 

posted @ 2019-06-30 21:50  大坑水滴  阅读(2084)  评论(0编辑  收藏  举报