Python 面向对象之高级编程

7.面向对象高级编程

7.1使用__slots__

python动态语言,new 对象后绑定属性和方法

Tip:给一个实例绑定的方法,对其他对象无效。可以通过对class绑定后,所有对象可以调用该方法

如果我们现在只有实例可以添加属性,使用__slots__,只允许对Student实例添加name和age属性,

添加其他属性报错

class Student(object):

__slots__ = (‘name‘, ‘age‘) # 用tuple定义允许绑定的属性名称

该限定只对当前对象起作用,其子类不做限定

-----------

7.2 @property  简短的代码又可检查参数得正确性

class Student(object):

def get_score(self):

return self._score

def set_score(self, value):

if not isinstance(value, int):

raise ValueError(‘score must be an integer!‘)

if value < 0 or value > 100:

raise ValueError(‘score must between 0 ~ 100!‘)

self._score = value

--------------------

class Student(object):

@property

def score(self):

return self._score

@score.setter

def score(self, value):

if not isinstance(value, int):

raise ValueError(‘score must be an integer!‘)

if value < 0 or value > 100:

raise ValueError(‘score must between 0 ~ 100!‘)

self._score = value

#。把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了

另一个装饰器@score.setter,  负责把一个setter方法变成属性赋值

------------------

7.3多重继承

类的继承问题http://python.jobbole.com/85685/

class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):

pass

---------

7.4 定制类

__iter__

class Fib(object):

def __init__(self):

self.a, self.b = 0, 1 # 初始化两个计数器a,b

def __iter__(self):

return self # 实例本身就是迭代对象,故返回自己

def __next__(self):

self.a, self.b = self.b, self.a + self.b # 计算下一个值

if self.a > 100000: # 退出循环的条件

raise StopIteration()

return self.a # 返回下一个值

for n in Fib()

print(n)

----------

7.5 枚举类

from enum import Enum

Month = Enum(‘Month‘, (‘Jan‘, ‘Feb‘, ‘Mar‘, ‘Apr‘, ‘May‘, ‘Jun‘, ‘Jul‘, ‘Aug‘, ‘Sep‘, ‘Oct‘, ‘Nov‘, ‘Dec‘))

for name, member in Month.__members__.items():

print(name, ‘=>‘, member, ‘,‘, member.value)

Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较。

-----------------

7.6使用元类

type() ;

#动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。

先定义metaclass,就可以创建类,最后创建实例。?完全看不懂

时间: 2024-11-09 01:49:29

Python 面向对象之高级编程的相关文章

python 的一些高级编程技巧

正文: 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合适地结合在一起,从而生成具有逻辑性并易于理解的数据模型.Python的数据结构从句法上来看非常直观,并且提供了大量的可选操作.这篇指南尝试将大部分常用的数据结构知识放到一起,并且提供对其最佳用法的探讨. 推导式(Comprehensions) 如果你已经使用了很长时间的Python,那么你至少应该听

面向对象的高级编程

1.给类对象绑定的函数,只对这个对象生效, 而对类绑定的对象, 所有的对象都可以调用. 栗子: def set_score(self, score): self.score = score s.set_age = MethodType(set_score, s) #对象绑定 Student.set_score = MethodType(set_score, Student) #绑定类 动态绑定允许我们在程序运行的过程中动态给class加上功能,这在静态语言中很难实现 2.使用__slots__

第十章第2讲:面向对象的高级编程:动态语言

1.体验python动态语言的魅力 # 定义一个空类,实例化后,给实例绑定属性与方法 class Person(object): pass s = Person() # 给实例s绑定属性 s.name = "Ann" print(s.name) def set_age(self,age): self.age = age from types import MethodType s.set_age = MethodType(set_age,s) s.set_age = 25 print(

python面向对象(高级)1+1=2

面向对象 class Foo: #静态字段,属于类 country='中国' def __init__(self,name): #普通字段 self.name=name #普通方法 def show(self): print(self.name) #静态方法 @staticmethod def sta(a1,a2): print(a1,a2) #类方法 @classmethod def classmd(cls): #cls是类名 print(cls) print('classmethod') #

Python面向对象编程高级特性

***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制允许在运行过程中动态的给class或者对象实例添加方法和属性,这个在静态语言中比如java是很难做到的: 1)动态绑定属性: 2)动态绑定方法 给一个实例绑定的方法对于其他实例和类都是不可见的:(这里也说明给一个实例动态绑定方法必须用MethodType(func, instance)) 但是给类绑

python基础-面向对象高级编程

实例化对象绑定属性 s.name = 'Michael' # 动态给实例绑定一个属性 类绑定方法---所有实例化对象均可调用Student.set_score = set_score 实例化对象绑定方法---只有该对象可调用from types import MethodType#绑定方法需要使用MethodTypes.set_age = MethodType(set_age, s) # 给实例绑定一个方法 Python内置的@property装饰器就是负责把一个方法变成属性调用的把一个gett

python 之面向对象高级编程

数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>&

python基础之面向对象高级编程

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

Python自动化开发课堂笔记【Day08】 - Python进阶(面向对象的高级用法,网络编程)

面向对象的高级用法 1. __str__ 只要执行打印对象的操作,就会触发该对象类中的__str__方法(也就是对象的绑定方法)它是一种默认的方法,默认的打印输出为<__main__.Foo object at 0x003EE350>,但是如果将该绑定方法在类中重写的话,要求必须有以字符串类型的返回值,返回形式可以自己设定. class Foo: def __init__(self,name,age): self.name = name self.age = age def __str__(s