Python基础(四)
一、类
(一)创建和使用类
- 创建类
- 根据约定,首字母大写的名称指的是类。
- 这个类的定义中的括号是空的,因为我们要从空白创建这个类。
- 方法__init__()是一个特殊的方法,当创建实体后,python会自动执行它。
- 定义__init__()时,形参self必不可少,且必须在开头。当我们创建实例时,无需给self提供值。
class Person():
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
def hello(self):
print("Hello " + self.name)
def bye(self):
print("Bye " + self.name)
- 根据类创建实例
class Person():
--snip--
me = Person("张三", 18)
you = Person("李四", 19)
print(you.name)
me.hello()
(二)使用类和实例
- 给属性指定默认值
class Person():
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = 0 # 给予age初始值
def hello(self):
print("Hello " + self.name)
def bye(self):
print("Bye " + self.name)
- 修改属性的值
- 直接修改
class Person():
--snip--
me = Person("张三", 18)
me.name = '李四' # 直接更改me的name值
me.hello()
- 通过方法修改属性的值
class Person():
--snip--
def update_age(self, age): # 定义方法来修改值
self.age = age
me = Person("张三", 18)
me.update_age(19)
(三)继承
编写类时,并非总要从头开始写。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。原有的称为父类,新类称为子类,子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。
- 子类的方法__init__()
class Person():
--snip--
class Men(Person):
def __int__(self, name, age):
super().__init__(name, age)
me = Men("张三", 18)
me.hello()
- 给子类定义属性和方法
class Person():
--snip--
class Men(Person):
--snip--
def sex(self):
print("Man")
me = Men("张三", 18)
me.sex()
- 重写父类的方法
class Person():
--snip--
class Men(Person):
--snip--
def hello(self):
print("Hello2")
me = Men("张三", 18)
me.hello()
- 将实例用作属性
class Person():
--snip--
class Men(Person):
def __int__(self, name, age):
super().__init__(name, age)
self.pper = Person() # 将实例Person作为Men的属性
me = Men("张三", 18)
me.hello()
(四)导入类
- 导入类
car.py
class Car():
--snip--
class ElectricCar():
--snip--
my_car.py
form car import Car, ElectricCar # 指定导入的类
import car # 导入模块中所有类
注:如ElectricCar属性中有一项为Car,在使用ElectricCar时可不调用Car。但如果这两个类不在一个文件中,则需要分别导入,否则会报错。
(五)Python标准库
只需要在程序开头包含一条简单的import语句,就可以使用标准库中的任何函数和类。
(六)类编码风格
- 类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
- 对于每个类,都应紧跟在类定义后包含一个文档字符,简要描述类的功能,并遵循编写函数的文档字符串才用的格式约定。每个模块后也应该包含这样的一个文档字符。
- 在类中,使用一个空行隔离方法;在模块中,使用两个空行隔离类。