Python:【学习笔记】面向对象程序设计——类的使用

1 概述

面向对象(Object Oriented,英文缩写OO)是一种设计思想。

  • 对象:划分两个部分,静态部分和动态部分。静态部分称为属性,即客观存在的事实;动态部分为对象的行为,即对象执行的动作。
  • :类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实现被称为类。

面向对象程序设计的特点:

  • 封装
  • 继承
  • 多态

2 定义类

在Python中,类的定义需要用class关键字来实现。

# 创建一个类
class People:
    pass

# 创建实例
Jack = People()
Mike = People()

3 创建__init__()方法

创建__init__()方法时,在类的创建中会被python自动执行。
其中可以定义类的属性:self.name = ‘xxx’,也可以利用参数在初始化时给类的属性赋值:

# 创建中国人类
class Chinese:
    def __init__(self, sex, age):
        # 参数初始化类的属性
        Chinese.sex = sex
        Chinese.age = age
        # 自动初始化类的属性
        self.country = 'China'

Jack = Chinese('male', '19')
print('My name is Jack.')
print('From : ', Jack.country)
print('Sex : ', Jack.sex)
print('Age : ', Jack.age)

4 访问限制

  1. 首位双下划线特殊定义方法,一般是系统定义名字,如__init__()。
  2. 以单下划线开头表示protect(保护)成员,只允许子类和类本身访问,不能用from modulename import * 导入。
class Chinese:
    def __init__(self):
        self._country = 'China'
    def show_country(self):
        return self._country

Jack = Chinese()

# 子类访问
print(Jack._country)

# 类本身访问
print(Jack.show_country())
  1. 以双下划线开头表示private(私有)成员,只允许类本身访问。
class Chinese:
    def __init__(self):
        self.__country = 'China'
    def show_country(self):
        return self.__country

Jack = Chinese()

# 类本身访问
print(Jack.show_country())

# 如果用以下子类访问会产生错误提示
# print(Jack.__country)

5 属性(property)

在python中可以利用@property(装饰器)将一个函数转化为属性,从而实现用于计算的属性。即不需要添加()在末尾。

class Chinese:
    def __init__(self):
        self.__country = 'China'
    @property
    def show_country(self):
        return self.__country

Jack = Chinese()
print(Jack.show_country)

注意:通过 @property 转换后的属性不能重新赋值,如果重新赋值会提示错误。同理我们可以利用这一特性,为属性添加安全保护机制,使其不可修改。

6 继承

子类继承基类格式如下:

# 基类
class Baseclassname:
    pass
    
# 子类
class Classname(Baseclassname):
    pass

当子类中某个方法(函数)与基类不同时,需要在子类内重写该方法(函数):

class People:
    def get_age(self):
        pass
    
class Chinese(People):
    def get_age(self):
        pass

子类用__init__()初始化的时候,不会调用基类的__init__()初始化。如果需要在子类__init__()初始化时,调用基类的__init__()初始化,则需要用如下方法:

class People:
    def __init__(self):
        People.feature = '会独立思考,具有很强的语言天赋'
    
class Chinese(People):
    def __init__(self, name, age):
        Chinese.country = 'China'
        self.name = name
        self.age = age
        # 调用基类__init__()方法
        super().__init__()

Jack = Chinese('Jack', '19')
print(Jack.name, '的个人信息')
print('From : ', Jack.country)
print('Age : ', Jack.age)
print('Feature : ', Jack.feature)

如果没有调用基类的__init()初始化的话,Jack.feature则会报错:

AttributeError: 'Chinese' object has no attribute 'feature'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值