Python类

类是什么?

是对一组具有相同属性和行为的对象的抽象描述。比如人,人相同的属性有姓名、性别、民族、出生年月、出生地、学历等等,人就是一个类,类对应的就是对象,对象是一个具体的实例,类没有具体的信息,但对象有,比如一个叫做张三的人,他就是一个对象,他名字叫张三、男、1966年5月出生、汉族、上海出生,这些就是张三这个对象的信息。

一、类的定义和基本结构

使用class关键字来定义一个类,类名通常采用大驼峰命名法(每个单词首字母大写)。类的基本结构如下:

python 复制代码
class ClassName:
    """类文档字符串"""
    # 类体
    pass

pass的作用:pass语句用于维护程序结构的完整性。

定义一个Person类:

python 复制代码
class Person:
    
    pass

二、类的属性和方法

类可以包含属性和方法。属性是变量,用于存储数据。方法就是我们前面学习的函数,用于定义行为。

**三、**构造方法和初始化

__init__方法是一个特殊的构造方法,在创建实例时自动调用。self参数代表实例本身,必须作为第一个参数。在__init__中,我们通常初始化实例属性。

完善Person类:

python 复制代码
class Person:
    #初始化方法,创建对象时自动调用
    def __init__(self, name, sex, birthday, nation, birthplace):
        self.name = name   # 姓名
        self.sex = sex     # 性别
        self.birthday = birthday  #出生年月
        self.nation = nation      #民族
        self.birthplace = birthplace  #出生地

    #输出个人简介
    def person_print(self):
        print(f'以下是{self.name}的个人简介:{self.name},{self.sex},'
              f'{self.birthday}出生,{self.nation},{self.birthplace}人。')
    pass

zs = Person('张三','男','1989年12月','汉族','上海')
zs.person_print()

#调用对象变量
print(zs.name)   

在上面的代码中,我们使用zs.person_print()调用了类中的方法,也使用zs.name调用类中的属性。

四、私有变量和私有函数

在类中,有一些变量我们不希望外部程序访问,可以将它设置为私有变量,私有变量只在类内部可以访问,外部访问就会报错。虽然我们无法直接访问私有变量,但我们可以使用函数的方法来简介访问私有变量。

私有变量的定义方式:在变量前加上两个下划线(__)

私有函数的定义方式也是一样的:在函数前加上两个下划线(__)

python 复制代码
class Person:
    __private = '这是一个私有变量,外部无法访问'
    #初始化方法,创建对象时自动调用
    def __init__(self, name, sex, birthday, nation, birthplace):
        self.name = name   # 姓名
        self.sex = sex     # 性别
        self.birthday = birthday  #出生年月
        self.nation = nation      #民族
        self.birthplace = birthplace  #出生地

    def private_print(self):
        print(self.__private)
    #输出个人简介
    def person_print(self):
        print(f'以下是{self.name}的个人简介:{self.name},{self.sex},'
              f'{self.birthday}出生,{self.nation},{self.birthplace}人。')
    pass

zs = Person('张三','男','1989年12月','汉族','上海')
# print(zs.__private)   #访问私有变量报错
print(zs.private_print())

为了实现对象的封装,在一个类中不应该有公有的成员变量,这些变量应该被设计为私有的,然后通过共有的set(赋值)和get(取值)方法来访问。

python 复制代码
class Person:
    #初始化方法,创建对象时自动调用
    def __init__(self, name, sex, birthday, nation, birthplace):
        self.name = name   # 姓名
        self.sex = sex     # 性别
        self.birthday = birthday  #出生年月
        self.nation = nation      #民族
        self.birthplace = birthplace  #出生地

    #定义名字赋值和取值函数
    def setName(self, name):
        self.name = name
    def getName(self):
        return self.name

    #定义性别赋值和取值函数
    def setSex(self,sex):
        self.sex = sex
    def getSex(self):
        return self.sex

    # 定义出生日期赋值和取值函数
    def setBirthday(self,birthday):
        self.birthday = birthday
    def getBirthday(self):
        return self.birthday

    # 定义民族赋值和取值函数
    def setNation(self,nation):
        self.nation = nation
    def getNation(self):
        return self.nation

    # 定义出生地赋值和取值函数
    def setBirthplace(self,birthplace):
        self.birthplace = birthplace
    def getBirthplace(self):
        return self.birthplace

    #输出个人简介
    def person_print(self):
        print(f'以下是{self.name}的个人简介:{self.name},{self.sex},'
              f'{self.birthday}出生,{self.nation},{self.birthplace}人。')
    pass

zs = Person('张三','男','1989年12月','汉族','上海')
print(zs.private_print())

五、类的继承

继承允许我们定义一个类,它继承另一个类的属性和方法。被继承的类称为父类(或基类),新类称为子类(或派生类)。在Python中声明子类继承父类,语法很简单,定义类时在类的后面使用一对小括号指定它的父类就可以了。

继承的语法:class 子类(父类):

python 复制代码
# 学生类继承Person类,重新定义person_print方法
class Student(Person):
    def person_print(self):
        print(f'学生简介:{self.name},{self.sex},'
              f'{self.birthday}出生,{self.nation},{self.birthplace}人。')
    pass

s = Student('张三','男','1989年12月','汉族','上海')
s.person_print()

在Python中,支持子类继承多个父类,当子类继承多个父类时,如果在多个父类中有相同的成员方法或成员变量,则子类优先继承左边父类中的成员方法或成员变量,从左到右继承级别从高到低。

六、多态

当多个子类继承父类,同一个方法在不同子类中可能有不同的行为,这种情形就叫多态。

python 复制代码
class Student(Person):
    def person_print(self):
        print(f'学生简介:{self.name},{self.sex},'
              f'{self.birthday}出生,{self.nation},{self.birthplace}人。')
    pass

class Teacher(Person):
    def person_print(self):
        print(f'老师简介:{self.name},{self.sex},'
              f'{self.birthday}出生,{self.nation},{self.birthplace}人。')
    pass
相关推荐
学测绘的小杨3 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz3109 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐10 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱21 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱1 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽1 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码1 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理