码迷,mamicode.com
首页 > 编程语言 > 详细

python面向对象编程

时间:2018-04-11 19:06:56      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:instance   sel   dir   严格   int   直接   方式   增加   练习   

1.类和实例

  类是创建实例的模板,而实例是一个个具体的对象,每个实例有自己的数据,且相互独立互不影响;

       方法是和实例绑定的函数,与普通函数不同,类的方法可以直接访问实例的数据;

        通过在实例上调用方法,就可以实现对实例内部数据的操作

         和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同:

2. 访问限制

    Class内部属性如果不想让外部直接访问,可以在变量前加__(两个下划线),如__name,而_name、__name__等都是可以直接访问的。

    设置成私有变量不代表不能访问,python解释器在其前边加上了类名,通过这种方式就可以进行访问,如bob._Student__name (bob是类Student的实例)

 

3.继承和多态:

   继承可以利用或重写父类的方法。

  当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态

这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

Python的“file-like object“就是一种鸭子类型。对真正的文件对象,它有一个read()方法,返回其内容。但是,许多对象,只要有read()方法,都被视为“file-like object“。许多函数接收的参数就是“file-like object“,你不一定要传入真正的文件对象,完全可以传入任何实现了read()方法的对象。

4.获取对象信息:

    type(),types,dir(),isinstance(),getattr(),settattr(),hasattr()

    总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”。

    getattr(),settattr(),hasattr()可以判断实例中是否存在相应变量、方法,并且可以填写相应的变量和方法。

5.类属性和实例属性

   实例可以通过bob.name 或setattr()等方式添加属性,而类可以通过类内代码增加属性,如果类和实例属性同名那优先调用实例的属性。

   #练习题 为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count = 0
def __init__(self,name):
self.name = name
Student.count = Student.count+1 # 注意是类Student.count而不是实例selt.count

a = Student(‘bob‘)
print(Student.count)
a = Student(‘bob‘)
print(Student.count)
a = Student(‘bob‘)
print(Student.count)

python面向对象编程

标签:instance   sel   dir   严格   int   直接   方式   增加   练习   

原文地址:https://www.cnblogs.com/wuchenggong/p/8797541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!