面向对象之内置方法(代码片段)

surewing surewing     2023-01-07     565

关键词:

标签(空格分隔): 内置方法


面向对象里的内置方法:

一、isinstance(obj,cls)和issubclass(sub,super)

  • isinstance(obj,cls)检查是否obj是否是类cls的对象;
    例如:
class Foo(object):
    pass
obj=Foo()
isinstance(obj,Foo)
  • issubclass(sub,super)检查sub类是否是super类的派生类
    例如:
class Foo(object):
    pass
class Bar(Foo):
    pass
issubclass(Bar,Foo)

说一些主要的内置方法:

item系列:

查看属性

class Foo:
    def __init__(self,name):
        self.name=name
        
    def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
        return self.__dict__.get(item)
        
    def __setitem__(self,key,value):
        print(key,value)
    def __delitem__(self,key):
        print(key)
        
obj=Foo('egon')
print(obj.__dict__)
#以前获取属性通过如下的代码:
obj.属性名字
#现在获取属性,item系列就是把obj模拟成字典形式,来访问
obj['name']#自动触发了__getitem__自动触发

设置属性

现在如果要设置属性呢?比如我们要设置:obj[‘sex‘]=‘male‘只要这样设置就,会触发__setitem__

class Foo:
    def __init__(self,name):
        self.name=name
        
    def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
        return self.__dict__.get(item)
        
    def __setitem__(self,key,value):
        self.__dict__[key]=value
    def __delitem__(self,key):
        print(key)
        
obj=Foo('egon')
#设置属性
boj['sex']='male'
print(obj.__dict__)
print(obj.sex)

执行结果为:
[image.png-17.2kB][1]

删除属性:

  • del obj.name
    del obj[‘name‘],这个会触发,上述的__delitem__,so代码为:
class Foo:
    def __init__(self,name):
        self.name=name
    def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
        return self.__dict__.get(item)
    def __setitem__(self,key,value):
        self.__dict__[key]=value
    def __delitem__(self,key):
        self.__dict__.pop(key)
obj=Foo('egon')

#删除属性
del obj['name']
print(obj.__dict__)

执行结果:
[image.png-18.6kB][2]

__str__系列:
以前我们说过‘name‘:‘egon‘这个字典其实就是本质就是我们 调用dict()这个类,然后把参数传进来而已,例如:
dict(‘ggname‘:‘egon‘)

如上述我们可以使用:d=dict(‘name‘:‘egon‘)
print(isinstance(d,dict))

执行结果:True
说明:d就是dict的一个实例;

  • 对于python自带的类,他们自带配备有打印的功能,打印出来的不是一个对象的地址:
    [image.png-62.5kB][3]

执行结果:
[image.png-29.6kB][4]

如上述我加入了:姓名和年龄,结果打印结果还是实力对象地址:
[image.png-91.1kB][5]
执行结果:
[image.png-19.8kB][6]

如上述的代码我们可以知道,对象实例化的时候对我们有用的属性有哪些:名字和年龄,那我们就需要定制一个方法,让他在print()这个对象的时候,就把对我有用的信息打印出来,这个内置的方法是什么呢?
是:

__str__方法:
[image.png-78.9kB][7]
其实当我们执行:print(obj)也就等于print(obj.str())

class People:
    def __init__(self,name,age):
        self.name =name
        self.age=age
    def __str__(self):
        return'<name:%s,age:%s>' %(self.name,self.age)
obj =People('egon',18)
print(obj)

如上述代码,在自动调取print(obj)的时候回,回自动去调取__str__这个方法;

del

之前我们学习过操作文件,

f=open('a.txt')
f.read()
f.close()

涉及到两方面的知识:上述代码的执行原理是;

a.txt是放在硬盘里面的,程序是不能直接操作硬盘的,程序是通过操作系统,然后有操作系统去操作硬盘的文件,所以我们在打开文件之后,要进行close,目的就是回收操作系统的资源,因为所有的资源不可能让你一直占用的;

  • 在你程序关闭之前,把操作系统的资源回收的;
class Open:
    def __init__(self,filename):
        self.filename=filename

    def __del__(self):
        print('del....回收操作系统资源,self.close()')
f=Open('setttings.py')
print('------main-------')#这是python 自动给你执行的del也可以自己执行:
del f # f.__del__()
  • 内置的——-del--(),在对象被删除的时候,python就自动调用__del__()这个方法;

面向对象之内置方法续集(代码片段)

接上一篇,内置方法续集:  六、__str__,__repr__和__format__    1、作用:__str__,__repr__改变对象的字符串显示        __format__自定制格式化字符串    2、示例:#!/usr/bin/envpython3#-*-coding:utf-8-*-#writebycongcongform... 查看详情

16元类(代码片段)

面向对象学习目录1面向对象介绍2类、实例、属性、方法详解3面向过程与面向对象进一步比较4类与对象5属性查找与绑定方法6小结7继承与派生8组合9抽象类10多态11封装12绑定方法与非绑定方法13内置方法(上)14内置方法(中)... 查看详情

面向对象之原型继承(代码片段)

搞清楚constructor构造器、prototype构造原型、实例对象三者关系constructor就是构造函数的名字,prototype是原型对象,每个构造函数都必须有一个原型对象;构造函数要被继承的方法在这里存放才不会浪费堆区空间;构造函数里面的th... 查看详情

面向对象:反射内置方法(代码片段)

反射:通过字符串映射到对象或者类的属性反射的方法:classPeople:country="China"def__init__(self,name,age):self.name=nameself.age=agedeftalk(self):print("%sistalking"%self.name)obj=People("neo",22)"""判断是否拥有某个属性:hasattr(o,name)#n 查看详情

面向对象-反射-其他内置方法(代码片段)

1.反射1.1反射含义通过字符串的形式操作对象的相关属性。方法有hasattr,getattr,delattr#!/usr/bin/envpython#-*-coding:utf-8-*-#Author:vitaclassPeople:country=‘China‘def__init__(self,name,age):self.name=nameself.age=agedeftalk(self): 查看详情

面向对象进阶——内置方法(代码片段)

七、__setitem__,__getitem__,__delitem__  item系列classFoo:def__init__(self,name):self.name=namedef__getitem__(self,item):#print(‘getitem...‘)#print(item)returnself.__dict__.get(item)#字典get方法有则取值,无也不会报错def 查看详情

面向对象的内功心法(代码片段)

这里分为两个部分,内置方法和内置函数。当然,内置方法是特别的多的,这里只是冰山一角,但一定都是最最能用的到的。这的内置函数也会讲解一些特殊用法,都是减少代码的,提升代码质量。从python深处说,应该先聊聊内... 查看详情

面向对象---类的绑定方法,面向对象高阶(代码片段)

...入的对象,则应该将该函数定义成非绑定方法/普通函数面向对象高阶isinstancepython内置的函数,用来传入两个参数,用于判断参数1是否是参数2的一个实例。判断一个对象是否使一个类的实例,打印结果使True或者使Falseprint(isinstan... 查看详情

面向对象之反射(代码片段)

一、三个内置函数issubclass、type、isinstanceissubclass():传入两个参数,判断第一个参数是否是第二个参数的后代classAnimals:passclassCat(Animals):passclassBosicat(Cat):passprint(issubclass(Cat,Animals))print(issubclass(Animals,Cat))print(i 查看详情

面向对象之反射及内置方法

一、静态方法(staticmethod)和类方法(classmethod)类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性)静态方法:让类里的方法直接被类调用,就像正常调用函数一样类方法和静态... 查看详情

4-19面向对象的内置方法(代码片段)

1,__str__和__repr____str__就是改变对象的字符串显示。Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是“字符串表示形式”。repr就是通过__repr__这个特殊方法来得到一个对象的字符串表示形... 查看详情

面向对象之—property,staticmethod(代码片段)

一特性(property)property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值。property是内置的一种封装方法:把一个属性“伪装”成一个数据属性,做法就是在需要伪装的属性正上方加@property。那么其实我们并不是... 查看详情

面向对象进阶:反射以及内置方法(代码片段)

一、反射反射:使用字符串数据类型的变量名来获取这个变量的值  input:用户输入的如果是a,那么打印1。如果输入的是b那么就打印2.如果输入name,那么打印alex  文件:从文件中读出的字符串,想转换成变量的名字  网... 查看详情

面向对象之构造方法(代码片段)

1.1构造方法:主要用来给对象的数据进行初始化1.1.1构造方法格式:A:构造方法格式a:方法名与类名相同b:没有返回值类型,连void都没有c:没有具体的返回值1.1.1.1案例代码十一:packagecom.itheima_08;/**构造方法:*给对象的数据进行初始化*... 查看详情

面向对象高级之自动触发的内置函数(代码片段)

---恢复内容开始---一.isinstance(obj,类) 判断对象是不是某个类的实例print(isinstance(1,int))classPerson:passp=Person()print(isinstance(p,Person))#结果都为True二.issubclass(子类,父类)  判断是否为子类,可以是子子类classPerson:passclassStuden... 查看详情

python3-self语法面向对象内置属性魔法方法(代码片段)

...做一个字典使用9.私有属性的使用10.类方法和静态方法11.面向对象练习12.函数练习1.uuid#uuid用来生成一个全局唯一的id模块#一般而言,在对uuid的需求不是很复杂的时候,uuid1或者uuid4方法就已经够用了importuuidprint(uui 查看详情

面向对象super内置函数(转)(代码片段)

super函数用来解决钻石继承。一、python的继承以及调用父类成员父类:classBase(object):def__init__(self):print("baseinit.")普通方法调用父类:classLeaf(Base):def__init__(self):Base.__init__(self)print("Leafinit.")super方法调用父类:classLeaf(Base): 查看详情

5_面向对象-中之方法的重写(代码片段)

1.什么是方法的重写(override或overwrite)?  子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作.2.应用  重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类... 查看详情