1)类:用来描述具体相同的属性和方法的对象的集合
2)对象:通过类定义的数据结构实例
3)类设计的要点:名称、属性(特征)、方法(行为,也就是函数)

    #其中的方法__init__(self,name,age) 是固定写法

 class Cat():
    """模拟小猫的类"""

def __init__(self,name,age):
    """初始化属性name和age"""
    self.name = name
    self.age = age

def eat(self):
    """小猫会吃饭"""
    print(self.name.title() + ' is now eating.')

def sleep(self):
    """小猫会睡觉"""
    print(self.name.title() + ' is now sleeping.')
    #eat(),sleep(self) 为类的方法,只要实例化类实例,即可随意调用
2.创建一个对象并赋值的方法(创建类实例)
对象名 = 类()
MIAOMIAO = CAT()

3.通过对象调阅类中的方法(即函数)
对象名.方法()
MIAOMIAO.eat()
MIAOMIAO.drink()

4.给对象添加属性
对象名.新的属性名 = 值
MIAOMIAO.weight = 25

5.获取对象的属性
    1)对象.属性
    print(MIAOMIAO.weight)
    2)在类中新定义一个方法,在方法中使用self.属性
    def Info(self):
        print(self.weight)

6.__init__()的方法
    1)是Python自动调用的方法,调用时间为:创建完对象之后立马调用
    2)不需要开发者调用
    3)这个方法会完成一些默认的事情,比如添加一些属性
    4)class XXXXX:
        def __init__(self, new_a, new_b):
            self.a = new_a
            self.b = new_b

动态修改对象属性值

直接访问属性赋值

my_cat.color = 'red'
print(my_cat.color)#结果为 red

封裝方法進行動態調用賦值,这种方法其实就类比 java 中的 set 方法。

my_cat.setColor('black')
print(my_cat.color)#结果为 black

继承,面相对象三大特性之一
前面说到,类实可以用来描述一类事物的,而为了达到代码的复用性,面相对象提供了继承的概念,即可以通过继承的方式获取已存在类的属性及方法。被继承方称为父类,继承方称为子类。
定义 Car 父类:

class Car():
    """汽车类"""
def __init__(self,make,model,year):
    self.make = make
    self.model = model
    self.year = year
    self.odometer_reading = 0

def get_descriptive_name(self):
    long_name = str(self.year) + ' ' + self.make + ' ' +self.model
    return long_name.title()

def read_odometer(self):
    print('This car has ' + str(self.odometer_reading) + ' miles on it.')

def updata_odometer(self,mileage):
    """动态处理属性值"""
    if mileage >= self.odometer_reading:
        self.odometer_reading = mileage
    else:
        print('You can\'t  roll back an odometer!')

def increment_odometer(self,miles):
    """属性值递增"""
    self.odometer_reading += miles

子类:

class ElectricCar(Car):
    """电动汽车"""
def __init__(self,make,model,year):
    """初始化父类属性"""
    super().__init__(make,model,year)

my_tesla = ElectricCar('tesla','model s',2017)
print(my_tesla.get_descriptive_name())

结果:2017 Tesla Model S
简析:ElectricCar 累拥有 Car 类的所有属性及方法,在_init_() 中调用父类 _init_方法初始化父类属性,其中super为父类对象,可以使用它访问父类的方法及属性。

定义子类独有的属性及方法
一类事物公有的属性及方法可以封装在父类,以达到复用的效果。除了可以从父类继承公有属性及方法之外,子类还可以定义自己独有的属性及方法。

 def __init__(self,make,model,year):
        """初始化父类属性"""
        super().__init__(make,model,year)
        self.battery_size = 70

def describe_battery(self):
    """子类特有的方法"""
    print('This car has a' + str(self.battery_size) + '-kwh battery.')

my_tesla = ElectricCar(‘tesla’,‘model s’,2017)
print(my_tesla.describe_battery())
结果:This car has a 70-kwh battery.

重写父类的方法
有时候父类定义的方法往往不符合子类现有的需求,可以对它进行重写,执行子类特有的逻辑。注意:只要重写了父类的方法,此时调用方法以子类实现为主

def get_descriptive_name(self):
print(‘重写了父类的方法’)
print(my_tesla.get_descriptive_name())
结果肯定是打印 重写了父类的方法

导入类
oop 编程中,每个类都有自己特有的功能,当整个项目也来越复杂的时候,就需要每个类之间相互依赖,正常情况下,都是一个 python 文件存储一个类,当需要依赖别的类时,需要导入。使用格式 from 文件名 import 类名…,当然了 也可以一个文件存储多个类。
例如:在 car.py 中添加 Car 类

class Car():
“”“汽车类”""

def __init__(self,make,model,year):
    self.make = make
    self.model = model
    self.year = year
    self.odometer_reading = 0

def get_descriptive_name(self):
    long_name = str(self.year) + ' ' + self.make + ' ' +self.model
    return long_name.title()

def read_odometer(self):
    print('This car has ' + str(self.odometer_reading) + ' miles on it.')

def updata_odometer(self,mileage):
    """动态处理属性值"""
    if mileage >= self.odometer_reading:
        self.odometer_reading = mileage
    else:
        print('You can\'t  roll back an odometer!')

def increment_odometer(self,miles):
    """属性值递增"""
    self.odometer_reading += miles

electricCar.py 中添加 ElectricCar 类继承自 Car ,

from car import Car


class ElectricCar(Car):
    """电动汽车"""
def __init__(self,make,model,year):
    """初始化父类属性"""
    super().__init__(make,model,year)
    self.battery_size = 70

def describe_battery(self):
    """子类特有的方法"""
    print('This car has a ' + str(self.battery_size) + '-kwh battery.')

def get_descriptive_name(self):
    print('重写了父类的方法')

作者:张少林
链接:https://www.jianshu.com/p/a06f7180c332
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

10-06 19:30