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