目录
类的定义
类是一类事务的抽象,比如不同名字,年龄的人都是人,不同类型的车都是车。
一般来说,类名使用驼峰命名法,每个单词首字母大写;属性和方法使用小写,单词之间使用下划线。
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 *