面向对象编程基础(进阶4)
1. python之面向对象编程
万物皆对象,因学过Java面向对象编程思想,Python也一样,所以简单写下这节
什么是面向对象编程
面向对象编程是一种程序设计范式 把程序看做不同对象的相互调用 对现在世界建立对象模型面向对象编程的基本思想
类和实列 类用于定义抽象类型 实例根据类的定义被创建出来 2. python之定义类并创建实例 # -*- coding:utf-8 -*- class Person(object): pass xiaoming = Person() xiaohong = Person() print xiaoming print xiaohong print xiaoming == xiaohong 3. python中创建实例属性 class Person(object): pass p1 = Person() p1.name = 'Bart' p2 = Person() p2.name = 'Adam' p3 = Person() p3.name = 'Lisa' L1 = [p1, p2, p3] L2 = sorted(L1, lambda p1, p2: cmp(p1.name, p2.name)) print L2[0].name print L2[1].name print L2[2].name 4. python中初始化实例属性在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时, init ()方法被自动调用,我们就能在此为每个实例都统一加上以下属性
class Person(object): def __init__(self, name, gender, birth, **kw): self.name = name self.gender = gender self.birth = birth for k, v in kw.iteritems(): setattr(self, k, v) xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student') print xiaoming.name print xiaoming.job 5. python中访问限制Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。
class Person(object): def __init__(self, name, score): self.name = name self.__score = score p = Person('Bob', 59) print p.name print p.__score 6. python中创建类属性每个实例各自拥有,互相独立,而类属性有且只有一份。
class Person(object): count = 0 def __init__(self, name): Person.count = Person.count + 1 self.name = name p1 = Person('Bob') print Person.count # 1 p2 = Person('Alice') print Person.count # 2 p3 = Person('Tim') print Person.count # 3 7. python中类属性和实例属性名字冲突怎么办 class Person(object): __count = 0 def __init__(self, name): Person.__count = Person.__count + 1 self.name = name print Person.__count p1 = Person('Bob') p2 = Person('Alice') print Person.__count 8. python中定义实例方法 class Person(object): def __init__(self, name, score): self.__name = name self.__score = score def get_grade(self): if self.__score >= 80: return 'A' if self.__score >= 60: return 'B' return 'C' p1 = Person('Bob', 90) p2 = Person('Alice', 65) p3 = Person('Tim', 48) print p1.get_grade() print p2.get_grade() print p3.get_grade() 9. python中方法也是属性 class Person(object): def __init__(self, name, score): self.name = name self.score = score self.get_grade = lambda: 'A' p1 = Person('Bob', 90) print p1.get_grade print p1.get_grade() 10. python中定义类方法和属性类似,方法也分实例方法和类方法。
class Person(object): __count = 0 @classmethod def how_many(cls): return cls.__count def __init__(self, name): self.name = name Person.__count = Person.__count + 1 print Person.how_many() p1 = Person('Bob') print Person.how_many()