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知识库 -> Python 面对对象:类 -> 正文阅读

[Python知识库]Python 面对对象:类

对象是类的实例

类是描述一类物体,是一个概括性的东西
对象: 指的是从类实例化过来的一个具体的物体
举例:
空调: 描述的是所有的空调(不知道是哪一个空调)
???? 能效等级, 立式的还是挂式的,匹数, 大小, 位置,编号
指定空调的属性:我家的位置,哪个房间, 20*300*200, 挂式的, 1
就知道这是一个具体的空调

目录

1.1类的定义? ? ??

1.1.1定义一个Dog的类

小总结

1.1.2私有方法

?1.1.3静态方法和类方法


1.1类的定义? ? ??

????????数据和功能绑定在一起: 类中有变量有函数。

如何去定义一个类:

语法格式:

ClassName: 类名,尽量使用驼峰命名
?????????? 单词首字母大写
class ClassName:
??? varibale_name = value
??? .....
??? def func(self, arg)
??????? statement

在python中规定:类中的函数,必须携带self参数 => 新的名字叫做方法
self: 自己 -> 指向的就是他的调用者

class Person:
    name = "zhangsan" # 类变量
    age = 18          # 类变量
    gender = "男"     # 类变量

    def test_fun(self): # test_func = method obj    #创建一个方法
        print("This is a method")

#类的实例化
zhangsan = Person()    #创建对象
lisi = Person()        #创建对象

#属性和方法的调用
print(zhangsan.name)
print(lisi.name)
zhangsan.test_fun()

?输出:

?????????

问题:按道理张三应该zhangsan,lisi应该也有自己的名字李四
? ? ? ? ? ?实例化出来两个对象: zhangsan和lisi
? ? ? ? ? ?name是一样的: 是因为是类变量

问题:可不可以有对象变量? 可以的

???????????如何去定义对象变量
? ? ? ? ? ?在初始化的时候定义对象变量

定义了一个类, => 从类实例化一个对象
AirCondition => myac
实例化一个对象的时候做了什么?
? ? ?创建一个新的对象(开创空间) (参与不了)
? ? ?初始化这个对象 (可以参与)
? ? ?这两个操作是Python解释器帮我们做的

1.1.1定义一个Dog的类

#定义一个Dog类
class Dog():                                    #定义一个小狗的类   注意:首字母大写的名称值得是类
    """一次模拟狗的简单测试"""

    #初始化的方法(也叫构造方法): python解释器已经规定好了
    def __init__(self, name, age):        #带参构造
        self.name = name                  #对象变量
        self.age = age                    #对象变量

    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name + "马上坐下")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name + "打滚")


dog1 = Dog("旺财", 2)    #创建对象
print(dog1.name)
dog1.sit()                #调用方法
dog1.roll_over()

输出:

?????????方法__init__()

? ? ? ? 类中的函数称之为方法,方法__init__()是一个特殊的方法,每当你根据Dog类去创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和结尾各有两个下划线,这是一种约定,避免Python默认方法与普通方法发声明称冲突。?__init__()方法定义时,形参self必不可少,还必须位于其他形参的前面。

小总结

定义一个类, 需要通过类来实例化具体的对象
类是组织数据和功能的:
?? 数据:类变量,对象变量
?? 功能: 方法
?? 类变量: 定义在类中,方法外的变量: variable_name = value
????????? 在加载类定义的时候,直接加载
????????? 意味着从这个类实例化出的所有对象都具有这个类变量
????????? 实例变量用于每个实例的唯一数据,而类变量用于类的所有实例共享的属性和方法\
????????? 对象变量中找不到的属性,会去类变量中找
?? 对象变量: 定义在类中的__init__(初始化方法内的)
?????????? 对象变量都是这种形式: self.variable_name = value
????????? 每次实例化的时候都会调用这个方法__init__(python中的规定)
????????? 所以每个对象具有自己的变量(类变量),有自己独立的空间
????????? 可以通过初始化方法来初始化对象不同值的属性

????????? 可以去定义对象的临时变量: 对象.temp_var = value
????????????? 只存在于当前这个对象


?? 方法: 和定义函数一样,不一样的地方在于:
? ? ? ? ? ? ? 1.方法是在类中定义的
? ? ? ? ? ? ? 2.方法的第一个参数是self(指向的是对象本身)
实例化:list_data = list()
?????? 对象 = 类(初始化的参数)
?????? 注意:初始化的参数主要是传递给__init__(初始化参数)
?????? 实例化其实有两个动作: python解释器帮我们完成的(帮我们去调用)
?????????? 1. 创建一个类的对象(开创空间) __new__
?????????? 2. 根据创建的对象进行初始化? __init__
?????????? 所以不需要显示去调用

实例化之后就可以拿到对象了,我们要干什么?
操作属性
操作类属性(类变量)
?? 只是去访问: 类.类变量和对象.类变量
?? 去修改: 类.类变量 = value? ?

?????????? ????????注意:如果是这样的修改: 对象.类变量名 = value
????????????????? ????????????其实就是定义了一个对象的临时变量-> 和类变量同名的变量
????????????????? ????????????而不是修改类变量的值

操作对象属性
?? 访问: 对象.变量名
?? 修改:? 对象.变量名 = value
操作方法
调用方法: 对象.方法名(参数)

1.1.2私有方法

? ? ? ? 在Python程序中,函数、类方法或属性的名字以两天下划线“__”开始的,(注意,这不是结束),那么这个函数、方法或属性就是私有的,其他所有的方法都是公开的。当在类的内部调用私有成员时,可以用点“.”运算符实现。语法格式如下:

? ? ? ? self.__方法名

私有函数、方法和属性的特点:

  1. 私有函数不可以从它们的模块外部调用
  2. 私有类方法不能够从它们的外面调用
  3. 私有属性不能够从他的类的外面访问

? ? ? ? 私有方法的举例:

class Site():
    def __init__(self, name, age):      #构造方法
        self.name = name                #共有属性
        self.__age = age                #私有属性
    def who(self):
        print("姓名:", self.name)
        print("年龄:", self.__age)

    def __foo(self):                    #定义私有方法
        print("这是私有方法")

    def foo(self):                      #定义公有方法
        print("这是共有方法")
        self.__foo()

text = Site("大黄", 2)                    #创建对象
text.who()
text.foo()
#text.__foo()

? ? ? ? 在上述实例代码中定义了私有方法__foo(),在类中可以使用它。在最后一行代码中,要尝试在外部调用私有方法__foo(),在这个Python中是不允许的。?

执行效果:

?

?1.1.3静态方法和类方法

? ? ? ? 类方法:隐含调用参数的类。在定义类方法时,因该使用装饰器@classmethod进行修饰,并且必须有默认参数“cls”.

? ? ? ? 静态方法:没有隐含调用参数。在定义静态方法时,应该使用修饰符@staticmethod进行修饰,并且没有默认参数。

????????实例代码:

class Jing():

    @staticmethod
    def static_method():            #静态方法装饰器
        print("此处调用了静态方法")      #定义静态方法

    @classmethod                    #使用类方法装饰器
    def class_method(cls):          #定义类方法
        print("此处调用了类方法")
        
#没有实例化类,通过类名调用静态方法
Jing().static_method()

#没有实例化类,使用类名调用类方法
Jing().class_method()

dm = Jing()                         #实例化类
dm.class_method()                   #通过对象调用类方法
dm.static_method()                  #通过对象调用静态方法

? ? ? ? 执行效果:

1.1.4类的专有方法(魔法方法)

? ? ? ? 格式:__xxx__():这些方法是Python解释器一斤规定好的。?自己定义方法时不能以这种格式。

????????

? ? ? ? __init__:? ? ? ? ????????构造方法,在生成对象时调用

? ? ? ? __del__:? ? ? ? ????????析构方法,在释放对象时调用

? ? ? ? __repr__:? ? ? ? ????????打印,转换

? ? ? ? __setitem__ :????????按照索引赋值
? ? ? ? __getitem__:????????按照索引获取值

? ? ? ? __len__:? ? ? ? ????????获得长度
? ? ? ? __cmp__:? ? ? ????????? 比较运算

? ? ? ? __call__:? ? ? ? ????????函数调用

? ? ? ? __add__:? ? ? ? ????????加运算
? ? ? ? __sub__:? ? ? ????????? 减运算

? ? ? ? __mul__:? ? ? ????????? 乘运算
? ? ? ? __div__:? ? ? ????????? 除运算

????????__mod__:? ? ? ????????? 求余运算

? ? ? ? __pow__:? ? ? ????????? 乘方

? ? ? ? __eq__:? ? ? ? ? ? ? ? 比较

? ? ? ? __ne__:? ? ? ? ? ? ? ? no equal

? ? ? ? __str__:? ? ? ? ? ? ? ? ?人类可读

? ? ? ? ?如果你定义了一个类,而且想让这个类的对象执行某些操作的时候(根据你的规则来执行),那么就需要重写这些魔法方法(专有方法)。

????????

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 12:58:42  更:2021-10-29 13:00:41 
 
开发: 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年11日历 -2024/11/15 22:42:08-

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