Python 面向对象

Python面向对象

创建类

模板

class ClassName:
  '类的帮助信息'#类的文档
  class_suite#类体

code

# _*_ coding:utf-8 _*_

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
#创建实例
emp1 = Employee("Jhon",1200)
emp2 = Employee("Sunny",2000)
#调用实例的方法
emp1.displayEmployee()
emp2.displayEmployee()
#调用类变量
print "Total emp:",Employee.empCount

给实例添加,删除,修改属性

已经有的实例,我们可以给他添加新的属性,添加后也可以删除和修改。对于在类中声明的属性,我们也可以进行删除操作。

下面的代码是在上面的基础上进行的操作

#属性的添加,删除和修改
emp1.age = 7
print emp1.age
emp1.age = 20
print emp1.age
#print emp2.age#添加属性并不能使该类的所有实例都有这个属性,而是我们添加属性的实例有了这个属性
del emp1.age
#print emp1.age#这句话报错,新添加的属性已经被删除
del emp1.name
#print emp1.name

类的内置属性

  • dict:类的属性(包含一个字典,由类的数据属性组成)
  • doc:类的文档字符串
  • name:类名
  • module:类所在的模块
  • base:类所有的父类构成元素(包含了一个由父类组成的元组)

code

print "__doc__:",Employee.__doc__
print "__name__",Employee.__name__
print "__module__",Employee.__module__
print "__base__",Employee.__bases__
print "__dict__",Employee.__dict__

垃圾回收

Python的垃圾回收也是基于引用计数的.
code

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,"销毁"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1),id(pt2),id(pt3)
del pt1
del pt2
del pt3

类的继承

class subClassName(ParentClass1[,ParentClass2,...]):
  '类的文档'
  class_suite#类体

code

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
    def myMethod(self):
        print "父类方法:myMethond"
class Child(Parent):
    def __init__(self):
        print "调用子类构造方法"
    def chilldMethod(self):
        print "调用子类方法"
    def myMethod(self):
        print "子类方法:myMethod"

c = Child()
c.chilldMethod()
c.parentMethod()
c.setAttr(1000)
c.getAttr()

b = 100
#isinstance:判断一个对象是不是其或其子类的实例
#issubclass:判断一个类是不是另一个类的子类
print isinstance(c,Child)
print isinstance(c,Parent)
print isinstance(b,Parent)
print issubclass(Child,Parent)
#方法的重写
c.myMethod()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
    def myMethod(self):
        print "父类方法:myMethond"
class Child(Parent):
    def __init__(self):
        print "调用子类构造方法"
    def chilldMethod(self):
        print "调用子类方法"
    def myMethod(self):
        print "子类方法:myMethod"

c = Child()
c.chilldMethod()
c.parentMethod()
c.setAttr(1000)
c.getAttr()

b = 100
#isinstance:判断一个对象是不是其或其子类的实例
#issubclass:判断一个类是不是另一个类的子类
print isinstance(c,Child)
print isinstance(c,Parent)
print isinstance(b,Parent)
print issubclass(Child,Parent)
#方法的重写
c.myMethod()

基础重载方法

  • __init__(self[,args,...]):构造函数
  • __del__(self):析构方法,删除一个对象
  • __repr__(self):转化为供解释器读取的格式
  • __str__(self):转化为适合人阅读的形式
  • __cmp__(self):对象比较

code

class Vector:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def __str__(self):
        return 'Vector(%d,%d)'%(self.a,self.b)
    def __add__(self, other):
        return Vector(self.a + other.a,self.b + other.b)

v1 = Vector(1,2)
v2 = Vector(3,5)
print "Add:",v1 + v2
print v1.__str__()
print v2.__str__()

类属性与方法

  • 私有属性:以两个下划线开头,表面这个属性是类的私有属性
  • 类的方法:必须包含self ,并且self为第一个参数
  • 类的私有方法:以两个下划线开头发方法为类的私有方法

code

class JustCounter:
    __privateCount = 0
    publicCount = 0
    def count(self):
        self.__privateCount += 1
        self.publicCount += 1
        print self.__privateCount

counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
#print counter.__privateCount#报错
print counter._JustCounter__privateCount#能这样调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值