Python学习(三):类

目录

类的定义

创建实例

给属性设置默认值

修改属性值

类的继承

给子类定义属性和方法

重写父类方法

将实例用作属性

类的导入

导入单个类

导入多个类

导入整个模块

导入所有类


类的定义

类是一类事务的抽象,比如不同名字,年龄的人都是人,不同类型的车都是车。

一般来说,类名使用驼峰命名法,每个单词首字母大写;属性和方法使用小写,单词之间使用下划线。

class People:

    def __init__(self, name):
        self.name = name

    def say_name(self):
        print(self.name)

类中的函数称之为方法,任何方法的第一个形参都是self,self指向的是实例的引用,调用方法时,self会自动传入self。

__init__()是一个特殊的方法,在类被实例化时调用,左右各有两个下划线,防止与类的普通方法冲突。创建实例时,仅需为后面的形参name提供值即可。提供的值被赋给name变量,并关联到self,也就是当前创建的实例里。像这样可通过实例访问的变量成为属性。

创建实例

使用句点表示法可通过实例访问属性,调用方法。

p1 = People("icydate")
print(p1.name)
p1.say_name()

若要创建多个实例,重复调用类实例化即可。

p1 = People("icydate")
p2 = People("iceink")
p3 = People("mike")

给属性设置默认值

class People:

    def __init__(self, name):
        self.name = name
        # 默认age为18
        self.age = 18

修改属性值

1、通过实例直接访问的方式进行重新赋值。

p = new People("mike")
print(p.name)
p.name = "jack"
print(p.name)

2、通过方法修改属性的值,如果有替你更新属性的方法,将大有裨益。这样,你就无需直接访问属性,而可将值传递给一个方法,由它在内部进行更新。

class People:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def change_name(self, name):
        self.name = name


p = People("mike", 18)
print(p.name)
p.change_name("jack")
print(p.name)

类的继承

编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

class Fruit:

    def __init__(self, name):
        self.name = name

    def say_name(self):
        print(self.name)

# 苹果类继承水果类
class Apple(Fruit):
    def __init__(self, name):
        # 初始化父类属性, super代表父类,执行父类的__init__()
        super.__init__(name)


apple = Apple("red apple")
apple.say_name()

给子类定义属性和方法

让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。

# 添加color属性,say_color()方法
class Apple(Fruit):
    def __init__(self, name, color):
        super.__init__(name)
        self.color = color

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

重写父类方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。

# 重写父类sayName()方法
class Apple(Fruit):
    def __init__(self, name, color):
        super.__init__(name)
        self.color = color

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

    # 与父类方法同名即可重写逻辑
    def say_name(self):
        print("Apple")

将实例用作属性

一个类的实例可以作为另一个类的属性,这里我们把Color提取出来,这么做的目的是让一些复杂类的结构,变的简单。

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

class Apple(Fruit):
    def __init__(self, name):
        super.__init__(name)

        # 将Color实例复制给了Apple的color属性
        self.color = Color()

类的导入

随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,Python允许你将类存储在模块中,然后在主程序中导入所需的模块。

导入单个类

my_car.py

class Car:
    def __init__(self, name):
        self.name = name

    def say_name(self):
        print(self.name)

main.py

from my_car import Car

car = Car("Audi")

导入多个类

my_car.py

class Car:
    def __init__(self, name):
        self.name = name

    def say_name(self):
        print(self.name)

class BigCar:
    def __init__(self, name):
        self.name = name
        self.type = "big"

    def say_name(self):
        print(self.name)

main.py

from my_car import Car, BigCar

car = Car("Audi")
bigCar = BigCar("Audi-big")

导入整个模块

可导入整个模块,在通过句点表示法访问对应的类

import my_car

car = my_car.Car("Audi")


"""或者模块名太长,可用as取别名"""
import my_car as mc

导入所有类

from my_car import *

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值