Python高级编程---面向对象

#!/usr/bin/python
#-*- coding:utf-8 -*-

'''
Created on 2016年6月24日

@author: Administrator
'''


'''
Python面向对象编程
http://www.runoob.com/python/python-object.html
'''


class Employee:
    empCount = 0
   
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount +=1
   
    def displayCount(self):
        print "Total Employee %d" % Employee.empCount

    def displayEmployee(self):
        print "Name:", self.name, ", Salary:", self.salary



class Point:
    def __init__(self, x =0 ,y = 0):
        self.x = x
        self.y = y
    def __del__(self):
        class_name = self.__class__.__name__
        print class_name, "销毁"


class Parent:     #定义父类
    parentAttr = 100
    def __init__(self):
        print "调用父类构造函数"
   
    def parentMethod(self):
        print "调用父类方法"

    def setAttr(self,attr):
        Parent.parentAttr = attr
   
    def getAttr(self):
        print "父类属性:", Parent.parentAttr
       

class Child(Parent):  #定义子类
    parentAttr = 200
    def __init__(self):
        print "调用子类构造方法"
   
    def childMethod(self):
        print "调用子类方法"

    #方法重写
    def getAttr(self):
        print "子类属性:", Child.parentAttr


#访问对象
def accessObject():
    emp1 = Employee("Zara", 2000)
    emp2 = Employee("Manni", 5000)
       
    print Employee.empCount
   
   
    emp1.displayEmployee()
    emp1.age = 7
    print emp1.age
   
    emp1.age = 9
    print emp1.age
   
    del emp1.age
   
   
    emp2.displayEmployee()
   
    #访问对象的属性
    print getattr(emp1, 'name')   #没有则抛出异常
   
    #检查是否存在一个属性
    print hasattr(emp1, 'name')   #没有则返回False ,有则返回True
   
    #设置属性
    setattr(emp1, 'name', 'zhangsan')
    emp1.displayEmployee()
   
    #删除属性
    emp2.age = 9
    delattr(emp2, 'age')  #如果删除一个不存在的属性,则抛出异常



#类的属性和方法
#类的私有属性:__private_attrs,  两个下划线开头,声明该属性为私有

#类的方法
#类的私有方法: __private_method , 两个下划线开头,声明为该方法为私有方法

class JustCounter:
    __secretCount = 0    #私有变量
    publicCount = 0      #公开变量
   
    def count(self):
        self.__secretCount += 1
        self.publicCount += 1
        print self.__secretCount
   



#Python内置属性
def printInnerAttribute():
    #__dict__:类的属性
    print "Employee.__dict__:", Employee.__dict__
   
    #__doc__:类的文档字符串
    print "Employy.__doc__:", Employee.__doc__
   
    #__name__:类名
    print "Employee.__doc__:", Employee.__name__
   
    #__module__:类定义所在的模块
    print "Employee.__module__", Employee.__module__
   
    #__bases__:类的所有父类构成元素
    print "Employee.__bases__:", Employee.__bases__





#Python对象销毁
def destoryObject():
    pt1 = Point()
    pt2 = pt1
    pt3 = pt1
   
    print id(pt1), id(pt2), id(pt3)  #打印对象的ID
    #40895560 40895560 40895560
   
    del pt1
    del pt2
    del pt3


#类的继承
def extendObject():
    c = Child()
    c.childMethod()
    c.parentMethod()
    c.setAttr(200)
    c.getAttr()

    #判断一个类是否是另一个类的子类或者子孙类
    print issubclass(Child, Parent)
   
    #判断一个对象是否是一个类或者子类的实力
    print isinstance(c, Child)
   


#私有变量 和 私有方法
def privateMethod():
    counter = JustCounter()  
    counter.count()
    counter.count()
   
    print counter.publicCount
    #print counter.__secretCount   不能通过实例来访问私有变量
   
    #可以通过 对象._类名__私有属性   的方式来访问私有属性
    print counter._JustCounter__secretCount
   


if __name__ == '__main__':
    #访问对象
    #accessObject()
   
    #访问内部属性
    #printInnerAttribute()
   
    #销毁对象
    #destoryObject()

    #类的继承
    #extendObject()
   
    #私有变量和私有方法
    privateMethod()









                          -------2016-06-25 0:20
                          @modaokeng.yongtaixincun.baiyunqu.guangzhoushi.guangdongsheng


















猜你喜欢

转载自listen-raining.iteye.com/blog/2307205