Python3 类
目录
python3 类
继承
项目组织方式
类编码风格
在python中,首字母大写的名称值得是类,而小写的名称指的是根据类创建的实例。
Python类中的每个属性都必须有初始值。可以在__init__()方法内为某个属性设置默认初始值,此时无需包含为它提供初始值的形参。
类中的函数称为方法,Python类中的方法都必须有一个参数,该参数是实例化对象的自身引用,该参数通常命名为self,且该参数必须放在参数列表中的第一个位置。
__init__():类的构造方法,在创建类的实例化对象时,Python会自动调用该方法。Python在调用时,首先会去类的定义中看有没有重新定义的__init__()方法,如果有就用新定义;否则调用默认的__init__()方法。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 此类没有重写__inti()__构造方法
class Restaurant:
"""一个简单的餐馆类"""
def description_restaurant(self):
"""对餐馆简单描述"""
print("美味的四川火锅")
# 此类重写__inti()__构造方法
class Newrestaurant:
def __init__(self, restaurant_name, cuisine_type):
"""重写构造方法:对属性赋值"""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
self.number_served = 0 # 设置默认初始值
def description_newrestaurant(self):
"""打印餐馆的描述信息"""
print("欢迎来到"+self.restaurant_name)
print("我们是一家"+self.cuisine_type)
def set_number_served(self, number):
"""设置就餐人数"""
self.number_served = number
def increment__number_served(self, increment):
"""增加就餐人数"""
self.number_served = self.number_served + increment
def print_numbers(self):
"""打印餐馆目前就餐人数"""
print("现在共有"+str(self.number_served)+"人就餐,请耐心排队等候")
my_restaurant = Restaurant() # 实例化一个对象
my_restaurant.description_restaurant()
new_restaurant = Newrestaurant("我爱南洋菜", "东南亚菜系")
new_restaurant.description_newrestaurant()
new_restaurant.print_numbers() # 打印默认初始值就餐人数
new_restaurant.number_served = 120 # 直接修改属性的值
new_restaurant.print_numbers() # 打印修改后的就餐人数
new_restaurant.set_number_served(46) # 通过方法修改属性的值
new_restaurant.print_numbers() # 打印修改后的就餐人数
new_restaurant.increment__number_served(4) # 通过方法递增修改属性的值
new_restaurant.print_numbers() # 打印修改后的就餐人数
继承
当一个类继承另一个类时,它将自动获得另一个类的所有属性和方法:原有的类称为父类,而新类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。
创建子类时,父类必须包含在当前文档中,且必须位于子类前面。必须在括号中指定继承的父类名称
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 父类
class Restaurant:
"""一家简单的餐馆"""
def __init__(self, restaurant_name, cuisine_type):
"""重写构造方法:对属性赋值"""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def description_restaurant(self):
"""打印餐馆的描述信息"""
print("欢迎来到"+self.restaurant_name)
print("我们是一家"+self.cuisine_type+"店")
# 子类IceCreamStand继承Restaurant类
class IceCreamStand(Restaurant):
"""一家冰激凌小店"""
pass # 子类只继承父类的所有属性和方法,没有重写父类的方法或定义自己的属性和方法
# 子类NewIceCreamStand继承Restaurant类
class NewIceCreamStand(Restaurant):
"""一家冰激凌小店"""
def __init__(self, restaurant_name, cuisine_type, flavors): # 重写父类的构造方法,并新增子类特有属性flavors
"""
先使用super()函数调用父类的构造方法,初始化父类的属性;再初始化子类的特有属性
"""
super().__init__(restaurant_name, cuisine_type)
self.flavors = flavors
def description_restaurant(self): # 重写父类的description_restaurant方法
"""打印餐馆的描述信息"""
print("欢迎大家来到"+self.restaurant_name)
print("我们是一家"+self.cuisine_type+"店")
def description_icecream(self): # 定义子类特有的方法
"""打印冰激凌的口味"""
n = 1
print("本店销售各种口味的冰激凌:")
for ice in self.flavors:
print(str(n)+"、"+ice+"口味")
n = n + 1
my_icecreamstand = IceCreamStand("夏天的味道", "冰激凌")
my_icecreamstand.description_restaurant()
flavors = ["香草味", "巧克力味", "草莓味", "芒果味", "抹茶芝士味"]
new_icecreamstand = NewIceCreamStand("新夏天的味道", "冰激凌", flavors)
new_icecreamstand.description_restaurant()
new_icecreamstand.description_icecream()
项目组织方式
一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有工作,确定一切都能正确运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中。先找出能够让你编写出可行代码的方式,再尝试让代码更为组织有序。
类编码风格
类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。
实例名和模块名都采用小写格式,并在单词之间加上下划线。
对于每个类,都应紧跟在类定义之后包含一个文档字符串,该文档字符串应简要描述类的功能。
每个模块也都应包含一个文档字符串,对其中的类可以用于做什么进行描述。
需要同时导入标准库中的模块和你自己编写的模块时,先编写导入Python标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句。
相关文章