python学习之面向对象学习进阶

一、property属性高级用法
可以将对象方法作为属性使用
例子:
class Foo:
    def __init__(self, age):
        )        self.__age = age

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, args):
        self.__age = args

    @age.deleter
    def age(self):
        del self.__age

obj = Foo(20)
print(obj.age)
obj.age = 3
print(obj.age)
del obj.age
print(obj.age)

class Foo:
    def __init__(self, age):
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, args):
        self.__age = args

    def del_age(self):
        del self.__age

    age = property(get_age, set_age, del_age)

obj = Foo(20)
print(obj.age)
obj.age = 3
print(obj.age)
del obj.age
print(obj.age)

__str__方法,默认返回对象内存地址,可以修改重写默认方法
例子:
class Foo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return ‘name: %s, age: %s‘ %(self.name, self.age)

obj = Foo(‘egon‘, ‘18‘)
print(obj)

__getitem__, __setitem__,__delitem__可以通过字典的方式调用属性和方法
例子:
class Foo:
    def __init__(self, name):
        self.name = name

    def __getitem__(self, item):
        print("getitem")
        return self.__dict__[item]

    def __setitem__(self, key, value):
        print("setitem", key, value)
        self.__dict__[key] = value

    def __delitem__(self, key):
        print(‘del obj[key]时,执行‘)
        self.__dict__.pop(key)

obj = Foo(‘egon‘)
print(obj.name)
#obj.name = ‘alex‘
#obj[‘name‘] = ‘alex‘
print(obj[‘name‘])
del obj[‘name‘]
print(obj[‘name‘])

__call__回掉函数,可以将对象变成可调用的
例子:
class Foo:
    def __call__(self, *args, **kwargs):
        print(‘====>‘)
obj = Foo()
obj()

__getattr__
从对象中读取某个属性时,首先需要从self.__dicts__中搜索该属性,再从__getattr__中查找
__setattr__用来设置对象的属性,通过object中的__setattr__函数来设置属性
__delattr__用来删除对象的属性

例子:
class Foo:
    def __init__(self, x):
        self.x = x

    def __getattr__(self, item):
        print(‘getattr‘)

    def __setattr__(self, key, value):
        self.__dict__[key] = value

    def __delattr__(self, item):
        self.__dict__.pop(item)

obj = Foo(10)
obj.x = 1
print(obj.__dict__)
del obj.x
print(obj.__dict__)

obj.a = 1
obj.b = 2
print(obj.__dict__)
del obj.a
print(obj.__dict__)
print(obj.aaaaaaaaa

exec函数,将字符串中的python代码提取出来执行
例子:
s="print(x)"
g={‘x‘:100000000}
l={‘x‘:1}
exec(s,g,l)
s = "y=2"
exec(s, g, l)
print(g)
print(l)

二、二次加工标准类

例子:

():
    (itemtag=):
        ().(item)
        .tag=tag
    (p_object):
        (p_object):
            (%p_object)
        (List).append(p_object)
    ():
        mid_index=()//[mid_index]
    ():
        .tag:
            ()
        ().clear()
        .tag=l=List([])
(l)
(l.mid)
实现迭代器协议
例子:
class Foo:
    def __init__(self, n, stop):
        self.n = n
        self.stop = stop

    def __next__(self):
        if self.n > self.stop:
            raise StopIteration
        x = self.n
        self.n += 1
        return x
    def __iter__(self):
        return self

obj = Foo(0, 5)
print(next(obj))
print(next(obj))
print(next(obj))

实现上下文管理器:
例子:
class Foo:
    def __init__(self, name):
        self.name = name

    def __enter__(self):
        print(‘enter‘)
        return self

    def __exit__(self,  exc_type, exc_val, exc_tb):
        print(‘exit‘)

with Foo(‘alex‘) as x:
    print(x)
    print(‘=>‘)
    print(‘=>‘)
    print(‘=>‘)
时间: 2024-10-07 06:30:09

python学习之面向对象学习进阶的相关文章

2019-04-15 Python中的面向对象学习总结

一.面向对象总结: (1)三要素:封装,继承,多态                                       详细介绍链接:https://www.jianshu.com/p/68ab35298a59 one.封装:所谓封装,也就是把 客观事物 封装成 抽象的 类,并且 类 可以把自己的数据和方法只让可信的类或者对象操作. 简而言之就是将内容封装到某个地方,以后再去调用被封装在某处的内容 测试代码: #封装测试例子 class Foo:#定义一个类 def __init__(s

python学习之面向对象学习

一.什么事面向对象,以及面向对象的优点? 面向过程优缺点: 我们知道面向过程是流水线式的编程,过程就是解决问题的步骤,把大的问题化解成小的模块 面向过程优点: 极大的降低了程序的复杂度 面向过程缺点: 牵一发而动全身, 所以完成一个模块很少改动,否则改动的地方比较多 面向对象优缺点: 面向对象编程的核心是对象,由属性和函数构成 面向对象优点: 解决程序的扩展性,对某个类的修改能反映到整个体系中 类的语法结构: class 类名:     类体      例子: class People:    

Python之路 - 面向对象学习

面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言

python之路——面向对象(进阶篇)

面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) 1 class City: 2 # 静态字段 3 country = "中国" 4 5 def __init__(self,city_name): 6 # 普通字段 7 self.city_name = city_name 8 9 def show(self): 10 print(self.city_name) 11 12 13 obj1

Python基础之面向对象(进阶篇)

面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,

c#入门学习之 面向对象学习

1  函数 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { /*static void Main(string[] args) { int[] myArray = {1,5,3,7,8,22,21,33,35,99,26 }; int maxVal = MaxValue(myAr

Python基础-week06 面向对象编程进阶

一.反射 1.定义:指的是通过字符串来操作类或者对象的属性 2.为什么用反射? 减少冗余代码,提升代码质量. 3.如何用反射? class People: country='China' def __init__(self,name): self.name=name obj=People('jame') #hasattr #print('country' in People.__dict__) print(hasattr(People,'country')) #getattr #print(Pe

Python进阶学习之面向对象

目录 面向对象 私有属性 面向对象 ? python也有面向对象的编程,它与C++中的类有点相似.它也只是运算符重载,继承. class Test: num=0 def __init__(self): # self.num=9 #print结果是9 Test.num=10 #print结果是10 t=Test() print(t.num) 但是在python中类中的变量全是共有的,可以通过Test.num来进行访问:在类中,初始化的构造函数并不是以Test()[Test()方法是C++中的构造函

Python学习—面向对象学习下

面向对象下 1.构造方法与析构方法 class People(object): # 构造方法:__init__(),在实例化对象时自动执行的方法 def __init__(self, name, age): self.name = name self.age = age print("创建对象成功.......") # 析构函数:__del__(), 当你删除对象时,自动调用的方法 # 删除对象:del 对象名 def __del__(self): print("删除对象成功