`
chengxianju
  • 浏览: 257731 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

python类学习

阅读更多

1.魔术方法__init__(相当于php中的__construct)
(1)
>>> class Test:
    def __init__(self):
        self.var=34

        
>>> f=Test()
>>> f.var
34

(2)
>>> class Test:
    def __init__(self,name='4nail'):
        self.name=name

        
>>> f=Test()
>>> f.name
'4nail'
>>> f=Test('this is a init')
>>> f.name
'this is a init'
>>>

2.继承(inherite),B继承A
>>> class A:
    def getClassName(self):
        print 'Hello,I am A'

        
>>> class B(A):
    pass

>>> a=A()
>>> b=B()
>>> a.getClassName()
Hello,I am A
>>> b.getClassName()
Hello,I am A
>>>

3.方法的覆盖
(1)
>>> class B:
    def getClassName(self):
        print 'Hello,I am B'

        
>>> a=A()
>>> b=B()
>>> a.getClassName()
Hello,I am A
>>> b.getClassName()
Hello,I am B
>>>

(2)出错,因为父类构造方法被覆盖了,所以会出错
>>> class Emploee:
    def __init__(self):
        self.name='wang'

        
>>> class Developer(Emploee):
    def __init__(self):
        self.age=23
    def getAge(self):
        print self.age

        
>>> a.name
'wang'
>>> b=Developer()
>>> b.age
23
>>> b.name

Traceback (most recent call last):
  File "<pyshell#96>", line 1, in <module>
    b.name
AttributeError: Developer instance has no attribute 'name'
>>>

(3)
解决(2)方法
>>> class Developer(Emploee):
    def __init__(self):
        Emploee.__init__(self)#调用父类构造方法
        self.age=34
    def getAge(self):
        return self.age

    
>>> a=Emploee()
>>> b=Developer()
>>> a.name
'wang'
>>> b.age
34
>>> b.name
'wang'
>>>

分享到:
评论
2 楼 mirguest 2011-01-05  
因此,我就写了下面这个代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class MyDescriptor(object):
    def __init__(self):
        self.count=0
        self.l=[]
    def __get__(self,obj,objtype):
        if obj not in self.l:
            self.l.append(obj)
            self.count=self.count+1
        return self.count
    def __set__(self,obj,objtype):
        raise AttributeError, "unreadable attribute"

class testDescriptor(object):
    count=MyDescriptor()
    def __init__(self):
        print("count:%03d"%self.count)
        self.ct=self.count
        print("Object %03d constructed"%self.ct)
    def __del__(self):
        print("Object %03d destroyed"%self.ct)


然后我们就可以去调用了:

In [2]: a=testDescriptor()
count:001

In [3]: a=testDescriptor()
count:002

In [4]: a=testDescriptor()
count:003

In [5]: b=testDescriptor()
count:004

可以看到,这样就实现了在不同实例中数据的共享。

但我这个想法是否正确呢?
1 楼 mirguest 2011-01-05  
我最近有个问题,就是:
如果在一个类A中,实例化了另一个类B,那么实例化A后的对象都是引用B的实例化吗?
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class myDescirptor(object):
    def __init__(self,initval=None,name='var'):
        self.l=[]
        self.val=initval
        self.name=name
        self.count=0
    def __get__(self,obj,objtype):
        if obj not in self.l:
            self.l.append(obj)
            self.count=self.count+1
        print 'Retrieving',self.name
        print 'Count',self.count
        return self.val
    def __set__(self,obj,val):
        if obj not in self.l:
            self.l.append(obj)
            self.count=self.count+1
        print 'Updating',self.name
        self.val=val


然后呢:
In [2]: class myClass(object):
   ...:     x=myDescirptor(10,'x')
   ...:     y=5
   ...:
   ...:

In [3]: m=myClass()

In [4]: n=myClass()

In [5]: m.x
Retrieving x
Count 1
Retrieving x
Count 1
Out[5]: 10
In [6]: n.x
Retrieving x
Count 2
Retrieving x
Count 2
Out[6]: 10

In [7]: m.y
Out[7]: 5

In [8]: n.y
Out[8]: 5

这里还没什么问题,但下面就不懂了。
我们如果修改y的值,那么这两个实例是不会互相影响的:
In [9]: m.y=55

In [10]: n.y
Out[10]: 5
这个没什么问题。但对于x,好像就不是这样子了:
In [11]: m.x=11
Updating x

In [12]: n.x
Retrieving x
Count 2
Retrieving x
Count 2
Out[12]: 11

可以看到,其实他们指向了同一个对象。

相关推荐

    python机器学习教程-从零开始掌握Python机器学习:十四步教程.pdf

    【Python机器学习基础】 Python作为机器学习的首选语言,因其简洁的语法和强大的库支持而备受推崇。在开始机器学习之旅之前,首先需要掌握Python的基础编程技能。这包括理解变量、数据类型、控制结构(如if-else,...

    python学习代码 python学习代码 python学习代码

    Python是一种高级编程语言,以其简洁明了的语法和强大的功能深受程序员喜爱,尤其适合初学者进行编程学习。本文将深入探讨Python的学习代码及其在不同领域的应用。 Python的基础语法是其核心知识点之一。它采用缩...

    深入浅出Python机器学习.pdf

    当我们面临一个新的数据点,需要判断其归属时,可以利用有监督学习构建的分类模型,输入该点的特征,模型会根据学习到的规律预测其应属于哪一类。如果是无监督学习,我们可以先对数据进行聚类,然后根据新点与已知...

    python 学习资料大全,打包下载

    这篇文档将深入探讨"python 学习资料大全"中包含的四个关键资源,它们可以帮助你全面掌握Python编程技能。 1. **CherryPyEssentials-RapidPythonWebApplicationDevelopment.rar** 这个文件涉及到的是使用CherryPy...

    Python机器学习教程.pdf

    Python 机器学习教程 本资源提供了 Python 机器学习的入门教程,涵盖了 Python 基础知识、数据处理、爬虫、机器学习算法等方面的内容。通过学习 Python 基础知识、掌握 Pandas、NumPy、Matplotlib 等重要模块、爬取...

    真正Python系统详细的学习PPT

    PPT中可能还会详细讲解Python的面向对象编程,包括类的定义、对象的创建、继承、封装和多态等概念。面向对象编程是Python的一大特色,通过它,开发者可以构建复杂、可复用的代码结构。 文件操作是Python中的重要一...

    Python学习资料整理

    其次,Python的面向对象特性是其强大之处,包括类的定义、对象的创建与实例化、继承、封装和多态等概念。理解这些概念有助于编写出更加灵活和可维护的代码。 再者,Python的文件操作是编程中常见任务,包括文件的...

    Python学习资源

    5. **面向对象编程**:Python是面向对象的语言,理解类和对象的概念,以及如何定义、实例化和继承类,对于深入学习至关重要。 6. **异常处理**:学习如何使用`try/except`语句来捕获和处理程序运行时可能出现的错误...

    python 快速学习书籍

    "Python快速学习书籍"旨在帮助初学者快速掌握Python编程基础,深入理解其核心概念,并逐步提升编程技能。 首先,Python的基础知识包括但不限于变量、数据类型(如整型、浮点型、字符串、布尔型、列表、元组、字典和...

    《Python学习手册》示例代码.zip

    《Python学习手册》是一本广泛认可的Python编程教程,它为初学者提供了全面而深入的指导,涵盖了Python语言的基础到高级特性。这个压缩包“《Python学习手册》示例代码.zip”显然包含了书中各个章节的示例代码,是...

    python语言学习教程

    Python语言学习教程是一个涵盖全面的在线资源,专为那些希望掌握Python编程的初学者和进阶者设计。Python是一种高级、通用的编程语言,以其简洁、易读的语法和强大的功能而闻名。这个教程可能包括了从基础语法、数据...

    Python3学习笔记整理

    【Python3学习笔记整理】 在Python3的学习过程中,掌握一系列核心概念和技能是至关重要的。这份笔记涵盖了Python的基础语法、数据结构、控制流、函数、模块化编程、面向对象编程等多个方面,旨在帮助初学者系统地...

    机器学习与python大作业-垃圾分类识别(学生版).ipynb

    机器学习与python大作业-垃圾分类识别(学生版).ipynb

    第七章Python对象和类习题及答案--中文

    在本节中,我们将学习 Python 中的对象和类,并通过习题和答案来巩固相关知识点。 定义对象的类 在 Python 中,类是定义对象的模板或蓝图。类是定义相同类型对象的模板,蓝图或合同。例如,在现实世界中,我们可以...

    基于python深度学习的多任务文本分类.zip

    基于python深度学习的多任务文本分类.zip基于python深度学习的多任务文本分类.zip基于python深度学习的多任务文本分类.zip基于python深度学习的多任务文本分类.zip基于python深度学习的多任务文本分类.zip基于python...

    贝叶斯思维统计建模的PYTHON学习法.pdf

    贝叶斯思维统计建模的PYTHON学习法 贝叶斯思维统计建模是指基于贝叶斯推断和统计建模的PYTHON编程学习方法。这种方法结合了贝叶斯统计学和PYTHON编程语言,旨在帮助学习者更好地理解和应用统计建模技术。 贝叶斯...

    Python学习手册 第5版(英文原版).zip

    《Python学习手册 第5版》是一本深入浅出的Python编程指南,专为那些希望掌握Python编程基础乃至进阶知识的读者设计。本书由资深Python开发者撰写,详细讲解了Python语言的核心概念、语法结构和常用库,是学习Python...

Global site tag (gtag.js) - Google Analytics