1.类的定义:
class <类名>: <其他语句> class <类名>(父类名): <其他语句>
例如:
class Father: _age=22 _name="sunny" class Son(Father): _work="IBM" son=Son() print(son._name) print(son._work)
运行结果:
//结果 sunny IBM
2.如果直接使用类名修改其属性,那么将影响那些没有改变此属性值的已经实例化的对象的该属性值。
有点绕,举个例子:
class Sample: _attribute=88 sample1=Sample() sample1._attribute=66 sample2=Sample() print(sample1._attribute) print(sample2._attribute) //使用类名称修改_attribute这个属性的值 Sample._attribute=6868 print(sample1._attribute) print(sample2._attribute)
运行结果:
//结果 66 88 66 6868
由此可知,对于sample1对象,由于修改了他的_attribute属性的值(改为66),所以在执行Sample._attribute=6868后,并不会改变sample1的这个属性值。
但是对于sampe2,可以发现使用类名.的方式改变了属性值,会影响到已经实例化的对象。
这一点和Java很不一样,因为在Java中无法使用类名.的形式修改非静态变量。换句话讲,若_attribute为静态变量(在Java中,在Python中无静态变量),通过sample1修改了这个变量,那么sample2的这_attribute变量也会改变。static变量嘛,你懂得。只有一份。
综上,可知。Python的语法很不同,要注意。
3.类的属性:
如果类的属性是以两条下划线开始则该属性为类的私有属性,不能在类外部被访问。
例如这样就会出错:
class Tom: __name='' __age=0 school='MIT' tom=Tom() print(tom.__age) #这里如果这样写就不会报错: print(tom.school) 因为__name是私有变量,而school是public的。所以可以直接调用
出错显示:
Traceback (most recent call last): File "F:\workspace\FirstPythonProgram\src\com\wjy\python\Client.py", line 7, in <module> print(tom.__age) AttributeError: 'Tom' object has no attribute '__age'
私有属性的命名形式: __privateAttrs
如果在类内部的方法中使用类的私有属性,则应该以如下方式调用。
self.__privateAttrs #其实无论是类的私有变量(以__开头的)还是非私有变量(不以__开头的),在类内部的方法中使用都要以self.attributeName的形式使用。
#这也是一种良好的编程习惯
4.类的方法
在类的内部使用def关键字可以为类定义一个方法。与函数定义不同的是,类的方法必须包含参数 'self ’ ,
且'self'必须为第一个参数。和类的私有属性命名相同,类的私有方法名也要以两条下划线开始。
注意:1.无论是私有变量还是public变量,类的私有方法都可以使用。类的非私有方法也可以使用类的私有变量和非私有变量。
2.类的私有方法或者私有变量,不能通过类名.的形式调用。也不能通过实例化的对象调用,只能内部调用。
例如:
class ShowDetail: __name='Wjy' __school='MIT' work='IBM' def showName(self): print(self.__name) def __showWork(self): print(self.work) showDetail=ShowDetail() showDetail.showName() #ShowDetail.__showWork(ShowDetail) 这句会报错 #showDetail.__showWork() 这句也会报错
注意: 在类的成员方法中调用别的成员方法,无论是私有的还是飞私有的方法。都要使用 self.方法名的形式。
总之养成良好的编程习惯,使用类成员变量或者成员方法时,都是用 self. 的形式调用。(在java中,使用 this.)
但是不能调用自己,比如下面这样写的话就会出错:
class ShowDetail: __name='Wjy' __school='MIT' work='IBM' def showName(self): self.showName() print(self.__name)
5
在python中有一类以两条下划线开始并且以两条下划线结束的类方法,称之为专有方法。
__init__ 构造函数,生成对象时调用
__del__ 析构函数,释放对象时调用
__add__ 加运算
__mul__ 乘运算
__cmp__ 比较运算
__repr__ 打印、转换
__setitem__ 按照索引赋值
__getitem__ 按照索引获取值
__len__ 获得长度
__call__ 函数调用
例如:
>>> class book: ... __author = '' ... __name = '' ... __page = '' ... price = 0 ... def __check(self,item): ... if item == '': ... return 0 ... else: ... return 1 ... def show(self): ... if self.__check(self.__author): ... print self.__author ... else: ... print 'No value' ... if self.__check(self.__name): ... print self.__name ... else: ... print 'No value' ... def setname(self,name): ... self.__name = name ... def __init__(self,author,name): ... self.__author = author ... self.__name = name ...
6.需要考虑一个问题,Python只有 private和非private成员方法和成员变量。但是没有protected的,那么在类的继承中子类不能继承private(以__开头的)成员变量和方法。
比如:
class Aa: __attributeA='a' attributeAA='aa' class Bb(Aa): def show(self): print(self.attributeAA) #print(self.__attributeA) 这句话运行会出错,private的是继承不到的。 bb=Bb() bb.show()
7.Python支持多重继承,注意Java是不支持的。而C++是支持的:
class FatherA: attribute='a' def show(self): print(self.attribute) class FatherB: attribute='b' def show(self): print(self.attribute) class Son(FatherA,FatherB): def showAll(self): print('Attribute: '+self.attribute) son=Son() son.show() son.showAll()
输出结果:
a //可知,默认都是输出的FatherA的,就是第一个的。若调整顺序class Son(FatherB,FatherA),则会输出FatherB的。
Attribute: a
8.重载
8.1重载 + 运算符:
代码:
class Option: num=6 def __add__(self,n): self.num+=n option=Option() option+5 print(option.num) #若改为print(Option.num)则会输出 6
结果:
//结果 11 //这样写是违法的: Option+3
8.2看个例子
class MyList: mylist=[] def __init__(self,*args): for arg in args: self.mylist.append(arg) print(arg) def show(self): print(self.mylist) # list=[1,2,3,4,5] # myList=MyList(list) myList=MyList(1,2,3,4,5) myList.show()
输出结果:
1 2 3 4 5 [1, 2, 3, 4, 5]
若这样初始化对象:
list=[1,2,3,4,5]
myList=MyList(list
则结果为:
[1, 2, 3, 4, 5] [[1, 2, 3, 4, 5]]
相关推荐
"Python 面向对象编程基础知识点" Python 面向对象编程是 Python 编程语言的基础,它具有独特的编程风格和语法规则。本文将从逻辑行和物理行、缩进、注释、main 函数、变量、表达式、语句、数据类型和运算等方面...
《Python面向对象编程指南》这本书,由Steven F. Lott编写,提供了一个全面深入的视角来理解和应用Python的OOP特性。 面向对象编程的核心概念包括类(Class)、对象(Object)、继承(Inheritance)、封装...
Python面向对象编程指南深入介绍Python语言的面向对象特性,全书分3个部分共18章。第1部分讲述用特殊方法实现Python风格的类,分别介绍了__init__()方法、与Python无缝集成—基本特殊方法、属性访问和特性及修饰符、...
以上就是Python面向对象编程的基本概念和特性。掌握这些基础知识,能帮助你更好地理解和编写Python程序,尤其在处理复杂逻辑和大型项目时,面向对象编程的优势会更加明显。在实际应用中,不断实践和探索,才能真正...
面向对象程序设计是 Python 中的一种重要编程范式,它基于类和对象的概念,强调数据封装、继承和多态性。本实验旨在让学生深入理解和实践面向对象编程的基本原理和技巧。 首先,实验要求学生掌握类的定义。在 ...
Python面向对象编程指南.[美]Steven F.Lott(带详细书签),分成两个压缩包。本书由树莓派基金会资深软件开发工程师亲笔撰写,是学习在树莓派上编程的必备手册。即使你没有任何编程经验,也可以畅游树莓派的世界。本书...
Python面向对象程序设计 Python面向对象程序设计
自己整理的Python面向对象编程速记速学小例子和源码,只有6页,可以迅速学会Python面向对象编程。原书已加入书签方便阅读。介绍了类的声明,实例化,绑定属性,构造函数,数据封装,继承,多态,实例属性和类属性。...
python面向对象程序设计实践(初级) ——以《三国演义》中三英大战吕布为例 设计实现思路: 设计类 定义武器类:武器名,攻击力 定义人物类:继承武器类,姓名,生命值 设计函数简化对象的使用 延时函数:延时0.5秒...
课件PPT资源,主要集中在面向对象编程讲解这一块,共计5个PPt,其中最长的比较全面,是基于python的程序设计思想与方法的课件,正好整理材料收集的,发上来共享一下,但是为啥我不能修改币币呢,我只要一个意思意思...
《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...
3. Python 面向对象编程.ipynb3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程....
PYTHON面向对象编程指南 [(美)STEVEN F.LOTT著;张心韬,兰亮译][人民邮电出版社].part1共2卷
《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。 《Python 3面向对象编程》不是Python 的入门书籍,适合具有...
### Python面向对象编程知识点解析 #### 一、面向对象三大特性及作用 **1. 封装** 封装是面向对象编程中的一个重要概念,它通过隐藏类的内部细节并对外提供公共接口来保护数据的安全性和完整性。封装使得类的使用...
Python面向对象编程是一种基于类和对象概念的编程范式,它支持封装、继承和多态等面向对象的特性。在面向对象编程中,类可以看作是对象的蓝图或模板,而对象则是根据类创建的实例。类中可以定义字段(数据成员)、...
PYTHON 面向对象 编程指南 本来想免积分的,但是 现在好像不能免积分了,大家用到的下载看看吧
python python面向对象编程基础
[美] Steven F. Lott 洛特,2016年人民邮电出版社出版