Python笔记9 类

一、类

通过搭配类与函数,可以写出优美的封装代码
面向对象编程,编写类时,定义了一个大类的对象都有的通用行为

① 创建类

在python中 类的首字母约定俗成为大写
在python2.7中,需要在class Dog(object)中添加object
类中的所有属性在实例化时必须有初始值,可以赋0或者赋空

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.weight = 0

    def sit(self):
        print(self.name.title() + " is sitting now.")

    def roll_over(self):
        print(self.name.title() + " rolled over!")

    def show_weight(self):
        print(self.weight)

    def update_weight(self,weight):
        self.weight = weight

1.方法

类中的函数被称作方法
__init__是一个特殊的方法,带下划线是因为要避免和普通方法起冲突,在每个类开头都需要写这个
self为指向实例本身的引用,是自动传入参数,在类中,可以通过调用self来访问类中的属性和方法

② 根据类创建实例

类是一类事物的通用模型,可以通过通用模型来创造具体的个体

1.创建实例

可以通过类创建一系列的有相同属性与行为特征的类,比如斑点狗与田园犬

my_dog = Dog("Hans", 8)
print("My dog's name is " + my_dog.name.title() + " and its age is " + str(my_dog.age) + " years old.")

2.访问实例的属性、方法(函数)

实例有它的属性以及一些内置在类,为实例所拥有的方法(函数)

print(my_dog.name)
my_dog.sit()

3.修改属性

直接修改属性值

my_dog.weight = 30
print(my_dog.weight)

通过方法(类内函数)修改属性
这样可以方便对一些不合理的调整属性的命令,使之不能直接修改属性而需要通过方法,在方法中对修改值作限制

def update_weight(self,weight):
    self.weight = weight

二、类的继承

类可以有它的父类,子类继承了父类的所有属性与方法,同时还有自己的属性和方法
首先需要在定义子类的括号中添加父类作为参数,因为__init__方法会用到父类的信息
父类也被称为超类(super class),super()用于联系父类和子类

① 类继承的基本模式

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.weight = 0

    def sit(self):
        print(self.name.title() + " is sitting now.")

    def roll_over(self):
        print(self.name.title() + " rolled over!")

    def show_weight(self):
        print(self.weight)

    def update_weight(self,weight):
        self.weight = weight


class ChinesePastoralDog(Dog):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.color = "Blue"

    def show_color(self):
        print(self.color)

my_dog = Dog("Hans", 8)
print("My dog's name is " + my_dog.name.title() + " and its age is " + str(my_dog.age) + " years old.")
herman_dog = ChinesePastoralDog("puper", 23)
herman_dog.show_color()

② 重写父类的方法

父类的一些方法在子类中是无效的,比如汽车需要加油,而电动汽车不需要
在子类中以父类方法同样的名称,对代码进行重写

def roll_over(self):
    print(" ChinesePastoralDog can not roll over!")

herman_dog.roll_over()
 ChinesePastoralDog can not roll over!

③ 类的嵌套:将类生成的实例用作另一个类的属性

在中华田园犬类外,另设了一个类专门用于毛色属性与毛色相关的方法,将毛色的类实例化,并将这个实例作为中华田园犬类中的一个属性,相当于类的嵌套

class ChinesePastoralDog(Dog):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.color = Color()

    def color_about(self):
        self.color.present_color()

    def roll_over(self):
        print("CPD can not roll over!")

class Color():
    def __init__(self, color="Blue"):
        self.color = color

    def present_color(self):
        print(self.color)

herman_dog = ChinesePastoralDog("puper", 23)
herman_dog.color_about()

三、类模块的导入与导出

类可以单独作为一个模块,也可以多个类放在同一个模块里,处理方式与函数的模块导入导出类似
以Class_Car.py文件作为Car类及其子类的模块为例子,其中有子类 Electric Car 和 Fuel Car

① 类模块的导出

和函数一样,在定义完后保存在.py文件中

② 从类模块中调用类

调用Car类:

from Class_Car import Car

调用ElectricCar类:

from Class_Car import ElectricCar

③ 从类模块中调用多个类

调用ElectricCar类与 FuelCar类

from Class_Car import ElectricCar, FuelCar

调用Class_car.py模块文件下的所有类

import Class_Car

④ 类模块间有依赖关系的处理

当Car与Electric Car分别保存在不同模块时,如果调用Electric Car,也就是Car的子类,需要先从另一个模块调用它的父类Car

from Class_Car import Car
from Class_ElectricCar import ElectricCar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值