首页 > 编程语言 >Python 类

Python 类

时间:2022-09-18 21:33:07浏览次数:64  
标签:__ 变量 Python self next 实例 class

Class对象

类对象支持两种操作:属性引用和实例化。

实例对象

实例对象有两种有效的属性名称:数据属性和方法。

  • 数据属性,不需要声明,像局部变量一样,将在第一次被赋值时产生
  • 方法是 “从属于” 对象的函数

方法对象

方法的特殊之处在于实例对象会作为函数的第一个参数被传入。

即 \(x.f() \Leftrightarrow MyClass.f(x)\)

类变量和实例变量

  • 类变量,类的所有实例共享的属性和方法。
  • 实例变量,每个实例的唯一数据。

补充说明

  • 如果同样的属性名称同时出现在实例变量和类变量中,属性查找会优先选择实例变量。
  • 在 Python 中没有任何东西能够强制隐藏数据,它是完全基于约定的。
  • 每个值都是一个对象,因此具有类型,并存储为 object.__class__。
class MyClass:
    """A simple example class"""
    num = 12345    # 类变量
    
    def __init__(self):
        # 定义类初始化方法
        self.data = []    # 实例变量
    
    def f(self):
        return "hello world."

# 属性引用
MyClass.num
MyClass.__doc__    # 返回类的文档字符串 "A simple example class"
# 类实例化
x = MyClass()

# 函数对象
MyClass.f

# x.f为方法对象
# x.f(),方法绑定后立即被调用,相当于 MyClass.f(x)
# xf = x.f,将方法保存起来再调用
x.f()
xf = x.f
print(xf())

# 相同名称的类变量和实例变量,优先实例变量
class Warehouse:
    purpose = 'storage'
    region = 'west'
w = Warehouse()
w.region = 'east'
print(w.purpose, w.region)    # 输出 storage east

继承

  • BaseClassName 必须定义于包含派生类定义的作用域中
  • Python 中所有方法实际上都是 virtual 方法
  • 使用 isinstance() 方法检查一个实例的类型
  • 使用 issubclass() 方法检查类的继承关系

多重继承

class DerivedClassName(BaseClassName):
    <statement-1>
    ...
    ...
    <statement-N>


class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    ...
    ...
    <statement-N>

私有变量

仅限一个对象内部访问的私有实例变量在 Python 中并不存在,但是大多数 Python 代码都遵循这样一个约定:带有一个下划线的名称 (如_spam) 应当被当作是 API 的非公有部分 (无论是函数、方法或是数据成员)。

class Mapping:
    def __init__(self, iterable):
        self.items_list = []
        self.__update(iterable)

    def update(self, iterable):
        for item in iterable:
            self.items_list.append(item)

    __update = update   # private copy of original update() method

class MappingSubclass(Mapping):

    def update(self, keys, values):
        # provides new signature for update()
        # but does not break __init__()
        for item in zip(keys, values):
            self.items_list.append(item)

迭代器

for() 语句会在容器对象上调用 iter() 方法,该函数返回一个定义了 __next()__ 方法的迭代器对象,此方法将逐一访问容器中的元素。当元素用尽时,__next__() 将引发 StopIteration 异常类终止 for 循环。

>>> s = 'abc'
>>> it = iter(s)
>>> it
<str_iterator object at 0x10c90e650>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    next(it)
StopIteration


class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init(self, data):
        self.data = data
        self.index = len(data)
    
    def __iter__(self):
        return self
    
    def __next__(self):
        # 反向输出 data
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

标签:__,变量,Python,self,next,实例,class
From: https://www.cnblogs.com/ylyzty/p/16705878.html

相关文章

  • Python面向对象+unittest框架(存档)
    面向对象基本的介绍面向对象是一个编程思想(写代码的套路)编程思想:1.面向过程2.面向对象以上两种都属于写代码的套路(方法),最终目的都是为了将代码书写出来,只不过过......
  • python实训2
    test3-1print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?\n")number=int(input("请输入您认为符合条件的数:"))ifnumber%3==2andnumber%5==3andnumb......
  • 【利用Python进行edf格式的肌电处理的一些过程记录】-2022/09
    (1)获取原肌电数据,生成图片1.使用的库:mne2.肌电数据的格式:edfdefShow_Information(file):raw=read_raw_edf(file,preload=True)info=raw.info......
  • python实验报告(第三周)
    实验3:流程控制语句一、实验目的和要求1、了解Python的程序结构形式和嵌套语句的格式;2、掌握if、if…else、if…elif…else选择语句的使用;3、掌握条件表达式和while、fo......
  • 编译原理:python编译器--运行时机制
    python的运行时机制的核心--python对象机制的设计理解字节码的执行过程用GDB跟踪执行一个简单的示例程序,它只有一行:“a=1”。对应的字节码如下。其中,前两行指令实现......
  • 力扣206(java&python)-反转链表(简单)
    题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=......
  • python自动发送邮件
    需要什么库?PyEmail这个库能够实现基于SMTP协议自动发送邮件的功能参考:PythonSMTP发送邮件|菜鸟教程(runoob.com)需要哪些准备?一个开启SMTP服务的邮箱这里以163网......
  • 学习python-Day62
    今日学习内容具体项目:D:\pythonProject\django_day60登录界面搭建<divclass="container-fluid"><divclass="row"><divclass="col-md-6col-md-offse......
  • Python函数-2
    一.导入$$f(x,y)=2x+3y$$上面括号里面的就是数学公式里的自变量,自变量就相当于函数里的参数。二.为什么要有参数如果一个大楼里有两种尺寸不一的窗户,显然在......
  • 修改-Python函数-2
    一.导入$$f(x,y)=2x+3y$$上面括号里面的就是数学公式里的自变量,自变量就相当于函数里的参数。二.为什么要有参数如果一个大楼里有两种尺寸不一的窗户,显然在......