Python面向对象

Posted Kimisme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象相关的知识,希望对你有一定的参考价值。

1.创建一个类

class Employee:
    empCount = 0
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
        Employee.empCount +=1

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

#创建Employee类的一个对象
emp1 = Employee("Zara",2000)
emp2 = Employee("Manni",5000)

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

2.修改与删除属性

class Employee:
    empCount = 0
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
        Employee.empCount +=1

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


emp1 = Employee("Zara",2000)
emp2 = Employee("Manni",5000)
#修改属性
emp1.salary = "aa"
emp1.displayEmployee()
 #删除属性
#del emp2.salary;

3.Python对象销毁(垃圾回收)

Python使用了引用计数来追踪内存中的对象

一个内部跟踪对象,称为一个引用计数器

当对象被创建时,就创建了一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为0时,它被垃圾回收。但是回收不是“立即”的,由解释器在适当的时机,将垃圾对象占用的内存空间回收

Python的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器

__del__是析构函数

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 = pt2
print id(pt1),id(pt2),id(pt3)
del pt1
del pt2
del pt3

4.类的继承

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):
    def __init__(self):
        print "调用子类构造方法"
    def childMethod(self):
        print "调用子类方法"

child = Child()#调用子类构造方法
child.childMethod()#调用子类方法
child.parentMethod()#调用父类方法
child.setAttr(200)
child.getAttr()#父类属性: 200

5.类的多继承

class A:
    pass
class B:
    pass
class C(A,B):
    pass

6.调用子类方法

class Parent:
    def myMethod(self):
        print "调用父类方法"
    
class Child(Parent):
    def myMethod(self):
        print "调用子类方法"

child = Child()
child.myMethod()#调用子类方法

7.运算符重载

class Vector:
    def __init__(self,a,b):
        self.a = a
        self.b = b

    def __add__(self,other):
        return Vector(self.a + other.a,self.b + other.b)

    def __str__(self):
        return "Vector(%d,%d)" %(self.a,self.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)

print v1+v2#Vector(7,8)

8.声明类的私有成员

类的私有属性:__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用,在类的内部使用self.__private_attrs

类的室友方法:__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用,在类的内部使用self__private_method

class JustCounter:
    __secreCount =0
    publicCount =0

    def count(self):
        self.__secreCount+=1
        self.publicCount+=1
        print self.__secreCount

counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secreCount#报错,私有

以上是关于Python面向对象的主要内容,如果未能解决你的问题,请参考以下文章

python之路之前没搞明白4面向对象(封装)

Python面向对象学习之八,装饰器

python:第二部分:面向对象:面向对象object orinted

Python 面向对象

面向面试编程代码片段之GC

面向对象编程其实很简单——Python 面向对象(初级篇)