python面向对象编程 类与实例 继承与多态 isinstance

2023-11-12

class Student(object):
    def __init__(self, name, gender):
        self.__name = name
        self.__gender = gender
    def set_gender(self, gender):
        if gender == 'male':
            self.__gender = gender
        elif gender == 'female':
            self.__gender = gender
        else:
            pass
    def get_gender(self):
        return self.__gender
# 测试:
bart = Student('Bart', 'male')
if bart.get_gender() != 'male':
    print('测试失败!')
else:
    bart.set_gender('female')
    if bart.get_gender() != 'female':
        print('测试失败!')
    else:
        print('测试成功!')
#下面的操作会导致实例增加一个新变量 变量名为__name
>>> bart.__name = 'New Name' # 设置__name变量!
>>> bart.__name
'New Name'

class类

class关键字,继承了object 表示了一个student类的定义

一般定义__xxx为私有变量, 而python解释器会自动将私有变量名重新命名,避免外界的直接引用;

例如:__name变量改成了_Student__name

类中私有对象的访问应该通过get() 和 set() 函数进行;

继承与多态

class Animal(object):
    def run(self):
        print('Animal is running...')
#继承Animal
class Dog(Animal):
    #覆盖父类的函数run()
    def run(self):
        print('Dog is running...')
    #拓展子类的新功能
    def eat(self):
        print('Eating meat...')
def run_twice(animal):
    animal.run()
    animal.run()

class Tortoise(Animal):
    def run(self):
        print('Tortoise is running slowly...')
>>> run_twice(Tortoise())
Tortoise is running slowly...
Tortoise is running slowly...

当我们调用run_twice函数的时候,只要对象有run方法都可以顺利运行!一个函数可以适用多样性的类,无论是父类还是子类

isinstance

用来查询变量是否属于某一类型比如,str, int 或者类

>>> isinstance('a', str)
True
>>> isinstance(123, int)
True
>>> isinstance(b'a', bytes)
True
>>> isinstance([1, 2, 3], (list, tuple))
True
>>> isinstance((1, 2, 3), (list, tuple))
True

>>> dir('ABC')
['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']

dir() 

可以获取对象的所有属性和方法;

getattr()setattr()以及hasattr(),我们可以直接操作一个对象的状态

>>> class MyObject(object):
...     def __init__(self):
...         self.x = 9
...     def power(self):
...         return self.x * self.x
...
>>> obj = MyObject()

>>> hasattr(obj, 'x') # 有属性'x'吗?
True
>>> obj.x
9
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> obj.y # 获取属性'y'
19
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404
>>> fn = getattr(obj, 'power') # 获取属性'power'并赋值到变量fn
>>> fn # fn指向obj.power
<bound method MyObject.power of <__main__.MyObject object at 0x10077a6a0>>
>>> fn() # 调用fn()与调用obj.power()是一样的
81

getattr()setattr()以及hasattr()也可以用在方法上

类的属性不需要实例化就可以直接访问,并且可以被所有实例访问

class Student(object):
    count = 0

    def __init__(self, name):
        self.__name = name
        Student.count = Student.count + 1
# 测试:
if Student.count != 0:
    print('测试失败!')
else:
    bart = Student('Bart')
    if Student.count != 1:
        print('测试失败!')
    else:
        lisa = Student('Bart')
        if Student.count != 2:
            print('测试失败!')
        else:
            print('Students:', Student.count)
            print('测试通过!')

参考来源:https://www.liaoxuefeng.com/wiki/1016959663602400/1017497232674368

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python面向对象编程 类与实例 继承与多态 isinstance 的相关文章

  • (discord.py) 尝试更改成员角色时,“用户”对象没有属性“角色”

    因此 我正在尝试编写一个机器人 让某人在命令中指定的主持人指定的一段时间内暂停角色 我知道该变量称为 小时 即使它目前以秒为单位 我稍后会解决这个问题 基本上 它是由主持人在消息 暂停 personmention numberofhours
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • [HDLBits] Count15

    Build a 4 bit binary counter that counts from 0 through 15 inclusive with a period of 16 The reset input is synchronous
  • 使用IntelliJ IDEA查看类图

    使用IntelliJ IDEA查看类图 一 查看图形形式继承链 查看方式有如下两种 show Diagrams 新打开一个标签页 show Diagrams Popup 打开一个悬浮窗口 选择想查看已打开的类或者Project Tree中的
  • 趣味python编程之经典俄罗斯方块

    国庆期间闲不住 用python把经典俄罗斯方块实现了一遍 找到了些儿时的乐趣 因此突发奇想 正统编程之余也给自己找点儿乐趣 换个角度写程序 原计划是写篇完整的博文对程序算法和函数模块做个说明 但是在整理程序的时候发现自己给程序加的注释已经相
  • JUC基础【万字篇】

    JUC 1 什么是JUC JUC 指的是java util三个并发编程工具包 java util concurrent java util concurrent atomic java util concurrent locks 实现多线程
  • SpringBoot 三种拦截http请求方式Filter,interceptor和aop

    SpringBoot 三种拦截http请求方式Filter interceptor和aop 这三种拦截方式的拦截顺序是 filter gt Interceptor gt ControllerAdvice gt Aspect gt Contr
  • office word复制图片出错

    前言 今天在使用word文档时 发现在复制图片时 总是复制的不完整 Word中插入图片只显示一行的 图片缺失的部分感觉和文字交织在一起 估计原因是 之前图片复制在word中的标题的位置上了 解决 点击word上方的 正文 然后再复制图片 问
  • 【C++ primer】第一章 快速入门 读书笔记

    1 1 编写简单的c 程序 返回 0值表明程序程序成功执行完毕 非零返回值表明有错误出现 返回值类型必须和函数的返回类型相同 或者可以转换成函数的返回类型 1 1 1 编译与执行程序 1 2 初窥输入 输出 术语 流 试图说明字符是随着时间
  • Python 爬虫库以及库函数总结&&踩坑

    1 Re库的基本使用 Re库介绍 Re库是Python的标准库 主要用于字符串匹配 调用方式 import re 正则表达式的表示类型 raw string类型 原生字符串类型 re库采用raw string类型表示正则表达式 表示为 r
  • Qt文本的淡入淡出

    Qt文本的淡入淡出 对于写在Qlabel中的文本 想对其实现淡入和淡出的特效 需要用到QGraphicsOpacityEffect 并搭配计时器使用 示例如下 h文件 include
  • [虎符ctf2021]你会日志文件分析吗

    SQL盲注 拿到一份日志 毫无头绪 上网查wp得知为sql盲注 得再学 1 看时间和后门的长度 sleep 2 1 HTTP 1 1 200 377 如果正确会休眠两秒 那么就找到377长度的请求 Ctrl F sleep 2 1 HTTP
  • 独立服务器比较虚拟机有什么好处

    1 资源不足 采用虚拟主机服务的用户实际上很难确切地知道到底有多少客户正在同时分享现实服务器的资源 当与您的网站在同一台服务器上的某个 些 网站的访问量很大时 这台服务器的系统结构可能很容易就不堪重负 出现过载 从而大大影响其它网站系统的性
  • Qt 定时器实现循环

    概述 后台进程需要循环时第一时间想到的就是while 但是涉及界面交互时就不那么适用了 例如在Qt主线程中直接使用循环就会导致界面卡死 此时可以使用多线程来解决这个问题 但只是做一些简单的测试工具时 考虑线程大可不必 第二种方法就是在whi
  • c语言rtsp客户端拉流,如何基于C++解决RTSP取流报错问题

    使用g opencv demo cpp o test 会报以下错误 这是我的代码 include include include include include include include include pragma comment
  • Ubuntu 14.04 apt-get update失效解决

    当运行apt get update后出现如下错误时 E Some index files failed to download they have been ignored or old ones used instead 可以将目录下 v
  • centos升级g++7.3.0

    sudo yum install centos release scl sudo yum install devtoolset 7 scl enable devtoolset 7 bash
  • Dubbo分布式日志追踪

    很多互联网公司都用的dubbo分布式框架进行微服务的开发 一个大系统往往会被拆分成很多不同的子系统 并且子系统还会部署多台机器 当其中一个系统出问题了 查看日志十分麻烦 所以我们需要一个固定的流程ID和机器ip地址等来把所有的日志穿起来 当
  • 如何安装vcpk

    如何安装vcpk 要安装 3fd 库 首先你需要安装 vcpkg 包管理器 以下是安装 vcpkg 的步骤 打开一个命令行终端 如 Windows 的命令提示符或 PowerShell 或者 Linux Mac 的终端 克隆 vcpkg 存
  • [云原生专题-53]:Kubesphere云治理-操作-通过Kubesphere应用商店一键部署微服务应用-消息中间件RabbitMQ的安装与部署

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122933831 目录 前言 第1章
  • exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

    exportfs命令 参数说明如下 a 全部挂载 或卸载 etc exports文件内的设定 r 重新挂载 etc exports中的设置 此外同步更新 etc exports及 var lib nfs xtab中的内容 u 卸载某一目录
  • python面向对象编程 类与实例 继承与多态 isinstance

    class Student object def init self name gender self name name self gender gender def set gender self gender if gender ma