python:面向对象进阶

栏目: Python · 发布时间: 6年前

内容简介:python:面向对象进阶

1,反射

反射:使用字符串类型的名字去操作变量

反射就没有安全问题,去操作内存中已经存在的变量

#反射对象中的属性和方法 

class A:
    price=20
print(getattr(A,'price'))

#反射对象的属性

class A:
    def func(self):
        print('in func')
a =A()
a.name ='alex'

ret =getattr(a,'name')#通过变量名的字符串形式取到的值
print(ret)

#反射对象的方法

ret =getattr(a,'func')
ret()

#反射类的方法:

if hasattr(A,'func')):
    getattr(A,'func')()

#反射类的属性

class A:
    price=20
print(getattr(A,'price'))

#反射模块的属性

import my
print(getattr(my,'day'))

#反射自己模块中的变量

import sys
print(getattr(sys.modules['__main__'],'year'))
getattr(sys.modules['__main__'],'qqxing')()

setattr设置/修改变量

class A:

  pass

setattr(A,'name','alex')

print(A,name)

delattr删除变量

delattr(a,'name')

2,__str__和__repr__

改变对象的字符串显示__str__,__repr__

自定制格式化字符串__format__

# 双下方法
# obj.__str__  str(obj)
# obj.__repr__ repr(obj)
class Teacher:
    def __init__(self,name,salary):
        self.name =name
        self.salary =salary
    def __str__(self):
        return "Teacher's object :%s"%self.name
    def __repr__(self):
        return str(self.__dict__)
    def func(self):
        return 'wahaha'
nezha =Teacher('nazha',250)
print(nazha)
print(repr(nezha))
print('>>> %r'%nezha)
#object  里有一个__str__,一旦被调用,就返回调用这个方法的#对象的内存地址
l = [1,2,3,4,5]   # 实例化 实例化了一个列表类的对象
print(l)
# %s str()  直接打印 实际上都是走的__str__
# %r repr()  实际上都是走的__repr__
# repr 是str的备胎,但str不能做repr的备胎
# print(obj)/'%s'%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串
# 如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
# repr(),只会找__repr__,如果没有找父类的
class Classes:
    def __init__(self,name):
        self.name = name
        self.student = []
    def __len__(self):
        return len(self.student)
    def __str__(self):
        return 'classes'
py_s9= Classes('python全栈9期')
py_s9.student.append('二哥')
py_s9.student.append('泰哥')
print(len(py_s9))
print(py_s9)
#__del__
class A:
    def __del__(self):   # 析构函数: 在删除一个对象之前进行一些收尾工作
        self.f.close()
a = A()
a.f = open()   # 打开文件 第一 在操作系统中打开了一个文件 拿到了文件操作符存在了内存中
del a          # a.f 拿到了文件操作符消失在了内存中
del a   # del 既执行了这个方法,又删除了变量
# __call__
class A:
    def __init__(self,name):
        self.name = name
    def __call__(self):
        '''
        打印这个对象中的所有属性
        :return:
        '''
        for k in self.__dict__:
            print(k,self.__dict__[k])
a = A('alex')()

以上所述就是小编给大家介绍的《python:面向对象进阶》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

概率

概率

[俄]施利亚耶夫 / 周概容 / 高等教育出版社 / 2008-1 / 48.00元

《概率(第2卷)(修订和补充第3版)》是俄国著名数学家A.H.施利亚耶夫的力作。施利亚耶夫是现代概率论奠基人、前苏联科学院院士、著名数学家A.H.柯尔莫戈洛夫的学生,在概率统计界和金融数学界影响极大。《概率(第2卷)(修订和补充第3版)》作为莫斯科大学最为出色的概率教材之一。分为一、二两卷,并配有习题集。第二卷《概率(第2卷)(修订和补充第3版)》是离散时间随机过程(随机序列)的内容。重点讲述(强......一起来看看 《概率》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码