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 的相关文章

随机推荐

  • [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