Python Class 详解

1、基本概念

1.1 类 class

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合。
  • 用计算机的语言描述类,是属性和方法的集合。

1.2 对象 instance / object

  • 对象是类的具象,是一个实体。
  • 对于我们每个人这个个体,都是抽象概念人类的不同的实体。
  • 对象属性:它是对象状态的抽象,用数据结构来描述
  • 对象操作:它是对象行为的抽象,用操作名和实现该操作的方法来描述

1.3 面向对象三要素

  • 1 封装
    组装:将数据和操作组装到一起
    隐藏数据:对外只暴露一些接口,通过接口访问对象

  • 2 继承
    多复用,继承来的就不用自己写了
    多继承少修改,OCP(open-closed principle),使用继承来改变,来体现个性

  • 3 多态
    面向对象编程最灵活的地方,动态绑定

1.4 哲学思想

  • 一切皆对象
  • 对象是数据和操作的封装
  • 对象是独立的,但是对象之间可以相互作用
  • 目前 OOP(Object-oriented programming) 是最接近人类认知的编程范式

2、类

2.1 类的定义

  • 1 必须使用 class 关键字
  • 2 类名必须是用 大驼峰 命名
  • 3 类定义完成后,就产生了一个类对象,绑定到了标识符 ClassName 上
class ClassName:
    语句块

2.2 类对象及类属性

  • 1 类对象,类的定义执行后会生成一个类对象
  • 2 类的属性,类定义中的变量和类中定义的方法都是类的属性
  • 3 类变量,直接定义再类中的属性;一般来讲,类变量可使用全大写来命名

2.3 类的实例化

  • 1 在类对象名称后面加上一个括号,就是调用类的实例化方法,完成实例化
  • 2 实例化就是真正的创建一个该类的对象(实例)
  • 3 每次实例化后获得的实例,都是不同的实例
  • 4 即使是使用同样的参数实例化,也得到不一样的对象
  • 5 Python 类实例化后,会自动调用 __init__ 方法,这个方法的第一个形式参数必须留给 self,其它参数随意

2.4 __init__ 方法

  • 1 类的实例化,实际上就是调用的 __init__(self) 方法
  • 2 这个方法可以不定义,如果没有定义会在实例化后隐式调用
  • 3 作用:对实例进行初始化
  • 4 初始化参数可以多个参数,但是第一个位置必须是 self
  • 5 此方法不能有返回值,也就是只能 return None
  • 6 实例化调用__init__魔术方法来进行初始化-出厂配置,对生成的实例进行属性配置,__init__ 定义的是实例的属性

2.5 实例对象 instance

  • 1 类实例化后一定会获得一个类的实例,就是 实例对象
  • 2 __init__ 方法的第一参数 self 就是指代某一个实例自身
  • 3 类实例化后,得到一个实例对象,调用类方法时,采用 instance.class_method() 的方式,实例对象就会绑定到方法上
  • 4 调用类方法时,类方法的 self 参数,就是 实例自身
  • 5 __init__ 中所定义的变量,是保存在 实例 上的,并不是 类 上,所以,称为 实例变量
  • 6 实例变量是每一个实例自己的变量,是自己独有的
  • 5 类变量是类的变量,是类的所有实例共享的属性和方法

2.6 示例 1

class MyClass:
    """My first class"""
    print('in class')
    xx = 'abc'   # 类的属性
    
    def __init__(self, x, y):
        print('in init')
        self.x = x
        self.y = y
    
    def foo(self):
        print('in foo')
        return "My class"
    
print(MyClass.xx, MyClass.foo, MyClass.__doc__)
myc1 = MyClass(1, 2)
myc1 = MyClass(1, 2)
print(myc1.foo())
print(MyClass.foo(myc1))

# 上例中 xx 和 foo 都是类的属性,__doc__ 也是类的特殊属性
# foo 是 方法method,本质上就是普通函数对象 function
# 第一个形式参数 self,指代当前实例本身
in class
abc <function MyClass.foo at 0x000002A221E76F70> My first class
in init
in init
in foo
My class
in foo
My class

2.7 示例 2

# self
class MyClass:
    def __init__(self):
        print(1, 'self in init = {}'.format(id(self)))
        
    def showself(self):
        print(2, 'self in showself() = {}'.format(id(self)))

c = MyClass()
print('After instance c')
print(3, 'c = {}'.format(id(c)))
print('=' * 30)
c.showself()
print(MyClass.showself)
print(c.showself)

# 类实例化后,得到一个实例对象,调用类方法时,采用 instance.class_method() 的方式,实例对象就会绑定到方法
# self 就是调用者,self 这个名字只是一个惯例,可以修改,但最好不要修改
# 查看打印结果,思考一下代码的执行顺序
1 self in init = 2895381183888
After instance c
3 c = 2895381183888
==============================
2 self in showself() = 2895381183888
<function MyClass.showself at 0x000002A221D851F0>
<bound method MyClass.showself of <__main__.MyClass object at 0x000002A2222ABD90>>

2.8 示例 3

# 实例变量和类变量
# 实例变量是每一个实例自己的变量,是自己独有的
# 类变量是类的变量,是类的所有实例共享的属性和方法

class Person:
    age = 3
    def __init__(self, name):
        self.name = name

tom  = Person('Tom')
jerry = Person('Jerry')
print(tom.name, jerry.name)
print(tom.age, jerry.age)
print(Person.age)
Person.age = 30
print(Person.age,  tom.age, jerry.age)
Tom Jerry
3 3
3
30 30 30

3、对象属性

3.1属性介绍

  • 1 特殊属性 __name__ __class__ __dict__ __qualname__

  • 2 Python 中每一种对象都拥有不同的属性

  • 3 函数、类都是对象,类的实例也是对象

  • 4 类属性保存在类的__dict__中,实例属性保存在实例的__dict__

  • 5 属性是类的,也是这个类所有实例的,其它实例都可以访问到

  • 6 属性是实例的,就是这个实例自己的,通过类访问不到

  • 7 对象(实例或类)可以动态的给自己增加一个属性(赋值即定义一个新属性)

  • 8 实例.__dict__[变量名]

  • 32
    点赞
  • 225
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Pydantic是一个Python库,用于数据验证和解析。它提供了一种简单且强大的方式来定义数据模型,并且可以验证输入数据的有效性。通过使用Pydantic,您可以轻松地定义和处理复杂的数据结构。 安装Pydantic的扩展功能可以通过pip命令来完成,例如安装邮件验证支持可以使用以下命令:pip install pydantic[email]。同样地,您也可以安装dotenv文件支持或同时安装多个扩展功能。 Pydantic的核心类是BaseSettings类,它允许在验证请求数据和加载系统设置的上下文中使用。在验证请求数据的上下文中,您可以使用基本数据类型进行验证。而在加载系统设置的上下文中,您可以从环境变量中读取设置,并且还可以处理更复杂的对象,例如DSN和Python对象。 一个很大的优势是,Pydantic的模型的定义与Python的类型提示密切相关。如果您熟悉使用Python类型提示,那么您就知道如何使用Pydantic。数据结构只是使用类型注释定义的类的实例,因此自动完成、linting、mypy、IDE(尤其是PyCharm)和您的直觉都应该与您的验证数据正常工作。您无需学习新的模式定义微语言,只需使用Python类型提示即可定义数据模型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python中pydantic库](https://blog.csdn.net/qq_62789540/article/details/127069443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值