python类与面向对象 类方法 构造器 析构器 类属性 实例属性 类的特殊属性 可用变量

本文深入探讨Python面向对象编程(OOP)的核心概念,包括类、对象、封装、继承和多态。详细讲解类的属性、方法,以及如何通过实例化创建对象。同时,介绍了Python中的构造器、析构器和特殊属性,帮助读者全面掌握Python OOP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python可以实现面向过程式编程,也可以实现面向对象式编程OOP。

面向对象编程OOP

在这里插入图片描述

面向对象的核心概念

在这里插入图片描述
在这里插入图片描述
类是抽象的,实例或者对象是具体的。

面向对象的程序设计方法:

在这里插入图片描述
一个对象里面可以存放其他多个对象.
任何对象都是类的实例。

对象的接口

在这里插入图片描述
类:将同一种具体事物的共同特性抽象出来的表现。
       状态和转换这些转台的操作
        数据:
                 变量:就是属性
        方法:
                函数:操作变量引用的数据代码。

一个类里面的方法只有通过构建类的实例或者类的对象来被操作,这就叫做方法的绑定。

类间的关系

在这里插入图片描述
依赖:列表依赖于字串,数字等不同的类。
包含:列表类的对象中包含字符串,数字等类的对象。
继承:只要父类所拥有的,子类都能够继承。反过来则不一定。

面向对象编程的原则:

1.封装
2.继承
3.多态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多态的表现如下:自动判断调用哪种方法。
在这里插入图片描述

python 类和实例

在这里插入图片描述
python3
在这里插入图片描述
python2
在这里插入图片描述

python2:
在这里插入图片描述
python3:
在这里插入图片描述
class class_name

类是一个对象。
类实例化出来的实例也是对象,即实例的对象。
因此类包含了2种对象,类对象和实例对象。世界上所有有的东西都应该找一个地方存起来,即占用一个地方。因此类对象就是存储类的地方。实例化出来的东西存放一个地方叫做实例对象。
通过对类对象的调用就能够实例化出来实例的

python 中创建类

在这里插入图片描述
class ClassName(bases):
      data=value #类属性 没有实例化对象时就可以存在它的值
      def method(self,…):
            self.member=value #带有self的属性是实例属性。只有实例化出来来时才会存在。

类的属性可以被所有的实例化对象使用,但是实例属性只能是实例化对象自己所使用。

例子:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
接上图:
在这里插入图片描述
如果要创建某个实例的不同数据:
在这里插入图片描述
接上图:
在这里插入图片描述
在这里插入图片描述

python类方法及调用 (重点)

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self.
在这里插入图片描述

python类和实例属性

在这里插入图片描述
在这里插入图片描述

python 构造器 : init(self)方法

class MyClass(object):
def init(self,x,y…):
self.arg1=x
self.arg2=y
class后面紧接着是类名,即People,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的.
object是所有类的父类,不写便是默认object.
有了__init__(self)的方法后,创建实例的时候,传入参数便不能为空,必须传入与__init__(self)中方法匹配的参数个数。
而self代表的是类的实例,该参数不需要另外进行传入

在这里插入图片描述
varname():在使用到时会被python解释器自动调用的
a+b=a.add()(b)
list1=[1,2,3,4,]
自创建这个列表对象的时候会自动调用list类里面的__init__()方法的。
在这里插入图片描述
# 下面的代码说明如果在函数中定义了__init__(self)方法,但没有给self参数,那么这个类的实例化对象是创建不出来的。只有有了self参数,才能实例化对象,即使__init__(self)函数中没有其他参数不执行任何内容。但是如果不写__ini__(self),则其他的函数就不一定要有self参数。

>>> class MyClass():
...     data="xiaopang"
...     def  __init__(self,x):
...         self.name=x
...
>>> mc=MyClass("xiaopang")
>>> print(mc.name)
xiaopang
>>> mc.data
'xiaopang'
>>> mc1=MyClass()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'x'
>>> class MyClass():
...    data="xiaopang"
...    def __init__():
...         pass
...    def  x(self,y):
...         self.name=y
...
>>> mc=MyClass("xiaopang")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes 0 positional arguments but 2 were given

>>> class  MyClass():
...     data="xiaopang"
...     def __init__():
...           pass
...
>>> mc=MyClass()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes 0 positional arguments but 1 was given
>>> class MyClass():
...     data="xiaopang"
...     def __init__(self):
...       pass
...     def  x(self,x):
...       self.s= x
...
>>> mc=MyClass()
>>> mc.x("xiaohe")
>>> mc.s
'xiaohe'
>>> mc=MyClass("xiaohe")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes 1 positional argument but 2 were given
>>>


析构器__del__(self)

del(self)是析构器,当Python对象的所有引用都不存在了(被del了),就会自动触发__del__(self)执行。
一般而言析构函数都无需重载的,解析器会自动销毁的。

在这里插入图片描述

类的特殊属性

在这里插入图片描述
代码实例如下:


>>> class MyClass():
...    data="xiapang"
...    def __init__(self,x):
...       self.name=x
...    def   qin(self,a,b,c,d):
...       self.e=a
...       self.f=b
...       self.g=c
...       self.h=d
...
>>> mc=MyClass("xiaohe")
>>> mc.name
'xiaohe'
>>> mc.qin("like","with","and","missing")
>>> mc.e
'like'
>>> mc.f
'with'
>>> mc.g
'and'
>>> mc.h
'missing'
>>> MyClass.__dict__
mappingproxy({'__module__': '__main__', 'data': 'xiapang', '__init__': <function MyClass.__init__ at
 0x0000000002F5CAE8>, 'qin': <function MyClass.qin at 0x0000000002FC21E0>, '__dict__': <attribute '_
_dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__do
c__': None})
>>> MyClass.__name__
'MyClass'
>>> MyClass.__doc__
>>> MyClass.__bases__
(<class 'object'>,)
>>> MyClass__module__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'MyClass__module__' is not defined
>>> MyClass.__module__
'__main__'
>>> MyClass.__class__
<class 'type'>

实例属性

在这里插入图片描述
#截取的部分代码:
mc代表类实例化出来的对象。
在这里插入图片描述
Python2:
在这里插入图片描述

可用变量

在这里插入图片描述
类变量:也叫做静态变量。
局部变量:方法内部的变量
实例变量: self.变量名。
全局变量:直接使用

对类变量进行修改可能会修改对应实例的属性值,但是如果在修改之前某个类实例已经重新对类属性进行赋值,则类对象对类变量的属性修改不影响那个已经重新赋值的实例属性,其他没有重新赋值的类的实例对象的属性值则会随着类变量的重新复制而改变。
在这里插入图片描述

完结

下一篇 类的继承和属性模型搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值