Python中的类

一:创建和使用类
        ①:创建Dog类,赋予dog蹲下(sit())和打滚(roll_over())的能力
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!")
        方法_init_()是一个特殊的方法,相当于构造方法,每当创建新实例时Python都会自动运行它,_init_()中的形参self必不可少,还必须位于其他形参的前面,但是在创建实例时不用给self传递值。
        后面的两个方法由于不需要额外的参数,因此只有一个形参self,变量都有前缀self,以self为前缀的变量可供类中的所有方法使用。self.name=name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。


         ②:根据类创建实例
    my_dog=Dog('stupy',3)
        这里使用上面的Dog类创建了一个名为‘stupy’、年龄为3的my_dog实例。可以通过my_dog.name获取名字,my_dog.age获取年龄,通过my_dog.sit()、my_dog.roll_over()调用其中的方法。

        ③:给属性指定默认值
        比如上例默认为公狗,则在_init_()函数中创建一个性别属性并设置初始值,self.sex='gong'。
        另外,可以通过以下方法修改属性的值:
            1.直接修改属性的值
                接上例,使用句点表示法来直接访问并设置小狗的属性name。
                my_dog.name='clever'
            2.通过方法修改属性的值( 相当于java中的set方法
                例:def update_name(self,newname)

                              self.name=newname

                       my_dog.update_name('wuwu')

        这样就无需直接访问属性,而可以将值传递给一个方法,由它在内部进行更新。


二:继承

如下例:
  1. class Car():  
  2.     def __init__(self, make, model, year):  
  3.         self.make = make  
  4.         self.model = model  
  5.         self.year = year  
  6.         self.odometer_reading = 0  
  7.     def get_descriptive_name(self):  
  8.         long_name = str(self.year) + ' ' + self.make + ' ' + self.model  
  9.         return long_name.title()  
  10.     def read_odometer(self):  
  11.         print("This car has " + str(self.odometer_reading) + " miles on it.")  
  12.     def update_odometer(self, mileage):  
  13.         if mileage >= self.odometer_reading:  
  14.              self.odometer_reading = mileage  
  15.         else:  
  16.             print("You can't roll back an odometer!")  
  17.     def increment_odometer(self, miles):  
  18.         self.odometer_reading += miles  
  19. class ElectricCar(Car):  
  20.     def __init__(self, make, model, year):  
  21.         super().__init__(make, model, year)  
  22. my_tesla = ElectricCar('tesla''model s'2016)  
  23. print(my_tesla.get_descriptive_name())

        

        定义子类时,在括号里指定父类的名称。super()帮助Python将父类和子类关联起来,调用父类的方法_init_(),让ElectricCar实例包含父类的所有属性。

        上面ElectricCar实例的行为与Car实例一样,现在定义电动汽车特有的属性和方法,在_init_()函数內定义一个电动汽车特有的属性,self.battery_size=70,同时编写一个打印电瓶描述的方法:
        def describe_battery(self):
                print("This car has a " + str(self.battery_size) + "-kWh battery.")

注:第9行的title()方法是用来返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写。

Python中的类_第1张图片

①:重写父类的方法
        在子类中重新定义父类的方法,运行时将忽略父类中的方法,转而运行子类中重新定义的方法。

②:导入类的方式

        a:导入单个类
            将Car类存储在一个名为car.py的模块中,在另一个文件中导入Car类并创建其实例:
                from car import Car
        b:在一个模块中存储多个类
            例如类Battery和ElectricCar都在模块car.py中,若只要导入一个ElectricCar类:
                from car import ElectricCar
            若两个类都导入:
                from car import Car,ElectricCar
        c:导入整个模块
            可以直接import module_name,再用句点表示法访问需要的类。这种导入方法简单,代码也易于阅读
        d:导入模块中的所有类
            from module_name import *
            注:不推荐这种导入方式。
                一、如果只要看一下文件开头的import语句,就能清楚地知道程序使用了哪些类,将大有裨益。
                二、如果程序文件中有其他同名的类,运行时将引发难以诊断的错误


你可能感兴趣的:(Python,Python)