类的属性和继承
Posted 7188-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的属性和继承相关的知识,希望对你有一定的参考价值。
一、属性
类是用来描述一类事物,类的对象指的是这一类事物中的一个个体.
只要是事物就要有属性,属性分为:
(1)数据属性:就是变量.
(2)函数属性:就是函数,在面向对象里通常称为方法.
注意:类和对象均用点(.)来访问自己的属性.
二、特殊的属性
访问该属性时将计算本身的值。该属性还可以作为属性添加安全保护机制.
2.1创建用于计算的属性
可以通过@property(装饰器)将一个方法转换成属性,从而实现用于计算的属性。可以通过方法名直接访问方法,不需要添加小括号"()",使代码更简洁.
@property
def methodname(self):
block
methodname:用于指定方法名,该名称作为创建的属性名.
self:类的实例,必要参数.
block:方法体,实现的具体功能.通常以return语句结束,用于返回结束结果.
class Rect:
def __init__(self, width, height):
self.width = width # 矩形的高
self.height = height # 矩形的宽
@property # 将方法转换为属性
def area(self): # 计算矩形的面积方法
return self.width*self.height # 返回矩形的面积
rect = Rect(800, 600) # 返回类的实例
print(‘面积为:‘, rect.area) # 创建属性的值
输出:
面积为: 480000
2.2为属性添加安全保护机制
如果想要创建一个可以读取,但不能修改的属性,可以使用@propetty实现只读属性.
class TVshow:
def __init__(self, show): # 定义电视节目表
self.__show = show
@property # 按方法转化为属性
def show(self): # 定义show的方法
return self.__show # 返回私有属性的值
tvshow = TVshow("正在播放《战狼2》") # 创建类的实例
print(‘默认:‘, tvshow.show) # 获取属性值
# 输出:
# 默认: 正在播放《战狼2》
# 尝试修改属性的值,再重新获取时,程序会报错.
tvshow.show = "正在播放《红海行动》" # 修改属性值
print("修改后:", tvshow.show) # 获取属性值
# 输出:
# AttributeError: can‘t set attribute # 不能设置属性
三、继承
当编写的类和另一个已经存在的类之间存在一定的继承关系时,就可以通过继承来达到代码重用的目的,提高开发效率.
3.1继承的基本语法
在编程计算中实现继承,表示这个类拥有它继承的类的所有公共成员或者受保护成员。在面向对象编程中,被继承的类称为父类或基类,新的类成为子类或派生类.
class ClassName(baseclasslist):
‘‘‘类的帮助信息‘‘‘ # 类文档字符串
statement # 类体
ClassName:指定类名
baseclasslist:指定要继承的基类,可以为多个,中间","分隔.不指定则使用所有Python对象中的根类object.
类的帮助信息:定义该字符串后,在创建类的对象时,输入类名和左括号‘(‘后,将显示该信息.
statement:类体,主要有类变量(或类成员)、方法和属性等定义语句组成.
3.2方法重写
当基类的某个方法不完全适用派生类时,就需要在派生类中重写父类的这个方法.
class Fruit: # 定义水果类
color = ‘绿色‘ # 定义类属性
def __init__(self):
pass
def harvest(self, color):
print(‘水果是:‘ + color + ‘的!‘) # 输出的是形式参数color
print(‘水果已经收获...‘)
print(‘水果原来是:‘ + Fruit.color + ‘的!‘) # 输出的是类属性color
fruit1 = Fruit()
fruit1.harvest(‘红色‘)
# 输出:
# 水果是:红色的!
# 水果已经收获...
# 水果原来是:绿色的!
class Orange(Fruit): # 定义橘子类(派生类)
color = ‘橙色‘ # 方法重写
def __init__(self):
print(‘
我是橘子‘)
def harvest(self, color):
print(‘橘子是:‘ + color + ‘的!‘) # 输出的是形式参数color
print(‘橘子已经收获...‘)
print(‘橘子原来是‘ + Fruit.color + ‘的!‘) # 输出的是类属性color
fruit2 = Fruit()
fruit2.harvest(‘橘色‘)
# 输出:
# 水果是:橘色的!
# 水果已经收获...
# 水果原来是:绿色的!
3.3 派生类中调用基类的__init__()方法
在派生类中的__init__()方法时不会自动调用基类的__init__()方法.
class Fruit: # 定义水果类
def __init__(self, color=‘绿色‘):
Fruit.color = color # 定义属性类
def harvest(self):
print("水果原来是:" + Fruit.color + "的!") # 输出的是类属性color
class Apple(Fruit): # 定义苹果类(派生类)
def __init__(self):
print(‘我是苹果‘)
super().__init__() # 调用基类的__init__()方法
apple = Apple() # 创建类的实例(苹果)
apple.harvest() # 调用基类的harvest()方法
# 输出:
# 我是苹果
# 水果原来是:绿色的!
以上是关于类的属性和继承的主要内容,如果未能解决你的问题,请参考以下文章