IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> CodingLifeDay4:Python:面向对象基础知识Section1 -> 正文阅读

[Python知识库]CodingLifeDay4:Python:面向对象基础知识Section1

目录

1,类和实例

2,类方法与静态方法

3,访问控制

4,属性装饰器


1,类和实例

# 类和实例的关系:类是一个抽象的对象,实例是一个具体的对象。例如“人”是一个抽象的类,而“小明”是一个具体的实例。由类获得实例的过程称为类的实例化。
class class_name:                                 # 使用class关键字定义了一个类,它的名字是class_name
    class_attrib1 = variable1                     # class_attrib1是一个类变量,它的值是variable1
    class_attrib2 = variable2                     # 类变量在实例中共享,相当于所有实例的共有属性,这些属性在实例化类时会被自动赋予。
    class_attrib3 = variable3                     # 通过实例修改类变量不会影响其他实例的类变量值。通过类修改类变量会影响所有未通过实例修改该变量的实例的类变量值。

    def __init__(self, variable1, variable2):     # __init__的作用是完成实例的初始化,在实例化类时它会被隐式调用。实例化类时需要为除self外的形参传入值。
        self.attrib1 = variable1                  # self.attrib1是一个实例变量,它的的值是variable1
        self.attrib2 = variable2                  # 实例变量是每一个实例特有的属性,它的值在初始化时被赋予,对这个值的修改只能通过实例进行
        pass                                      # self(可以是其他名字)代指实例本身,它必须是方法的第一个参数,调用类中的方法时不需要为这个参数传入值。

    def function(self, variable):                 # 这是一个具体的方法,通过它让实例实现某些功能
        function_body


class chinese:                                    # 定义了一个类,它的名字是chinese
    country = 'china'                             # 每一个chinese的实例都具有两个属性:country和virtue
    virtue = 'honest'

    def __init__(self, name, height):             # 每一个chinese的实例都具有独特的name,height
        self.name = name
        self.height = height

    def greet(self):                              # 定义了一个greet方法
        print(f"你好,我的名字是{self.name},很高兴认识你")

    def learn(self, interest):
        print(f"我想要学习{interest}")             # 定义了一个learn方法


xiao_ming = chinese('小明', 175)                  # 创建了两个实例对象
xiao_hong = chinese('小红', 165)

2,类方法与静态方法

class employee:
    employee_book = {'小明': 175, '小红': 165, '小张': 180}

    def __init__(self, name, height):
        self.name = name
        self.height = height
        self.new_employee(self.name, self.height)

    def greet(self):                                        # 实例方法
        print(f"你好,我叫{self.name},很高兴认识你")

    @classmethod                                            # 类方法定义前加上@classmethod
    def print_employee_book(cls):                           # cls(可以是其他名字)代指这个类,它必须是类方法的第一个参数,调用类方法时不需要为这个参数传入值。
        for name, height in cls.employee_book.items():
            print(name, height)

    @classmethod
    def new_employee(cls, name, height):
        cls.employee_book[name] = height

    @staticmethod                                           # 静态方法定义前加上@staticmethod
    def class_introduce():                                  # 静态方法不必传入self或cls
        print('这个类用于记录员工的姓名和身高.')             # 静态方法可以不涉及具体的实例和类本身,将它放在类里主要是因为它做的事与类有关。

    @staticmethod
    def sum_height(employee1, employee2):
        print(employee1.height + employee2.height)


employee.print_employee_book()                             # 类方法的两种调用

xiao_wang = employee('小王', 170)

xiao_wang.print_employee_book()

xiao_wang.greet()                                          # 实例方法的两种调用

employee.greet(xiao_wang)

employee.class_introduce()                                 # 静态方法的两种调用

xiao_li = employee('小李', 185)

xiao_wang.sum_height(xiao_wang, xiao_li)

3,访问控制

class student:
    country = 'china'                                  # 没有特殊处理的变量名/方法名

    def __init__(self, name):
        self._name = name                              # 以下划线开头的变量名/方法名,仍然可以被类和实例访问(解释器没有做任何改变,但一般约定不要直接访问这样的变量/方法)

    def __greet(self):                                 # 以双下划线开头的变量名/方法名,只能被类访问。要让实例访问,需要在变量名/方法名前加上'_classname'
        print(f"你好,我叫{self._name},很高兴认识你。")

    def use_greet(self):
        self.__greet()

xiao_ming = student('小明')

print(xiao_ming._name)

xiao_ming._student__greet()

xiao_ming.use_greet()

4,属性装饰器

# 属性装饰器作用:①把方法当成属性来访问更方便;②通过方法调用“private”的属性,一方面简化了访问,另一方面隐藏了原本的属性名,可以避免被随意修改
class people:
    def __init__(self, age):
        self.__age = age         # 使用双下划线开头,使得变量只能被类直接访问


    @property                    # @property:只读
    def age(self):
        return self.__age

    @age.setter                  # @function_name.setter:可以修改
    def age(self, newage):
        self.__age = newage

    @age.deleter                 # @age.deleter:可以删除
    def age(self):
        del self.__age


xiao_ming = people(18)

print(xiao_ming.age)             # 注意不是xiao_ming.age()

xiao_ming.age = 20               # 没有@age.setter会报错:AttributeError: can't set attribute

print(xiao_ming.age)

del xiao_ming.age                # 没有@age.deleter会报错:AttributeError: can't delete attribute

# print(xiao_ming.age)           # 报错:AttributeError: 'people' object has no attribute '_people__age'
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:46:25  更:2021-08-02 10:47:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:31:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码