类的属性和继承

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()方法

# 输出:
# 我是苹果
# 水果原来是:绿色的!







以上是关于类的属性和继承的主要内容,如果未能解决你的问题,请参考以下文章

Python中类的继承及类的属性和方法总结

子类将继承父类所有的方法和属性吗?为啥?

类的继承

类的继承

类的继承中的super()

继承知识总结