Python 面向对象
创建类
python"># Python面向对象
# 创建类
# 使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
# class ClassName:
# '类的帮助信息' #类文档字符串
# class_suite #类体
class Employee:'所有员工的基类'# 类变量empCount = 0# 构造函数(方法)def __init__(self,name,salary):self.name = nameself.salary = salaryEmployee.empCount += 1# 这两个是实例方法 创建实例 实例数量def displayCount(self):# empCount变量是一个类变量,他的这个值在这个类的所有实例之间共享# 你可以在内部类或外部类使用Employee.empCount访问。print("Total Employee %d" % Employee.empCount)def displayEmployee(self):print("Name :",self.name, ",Salary:",self.salary)# self代表类的实例,而非类
# 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
class Test: #定义一个叫Test的类def prt(self):#定义了一个实例方法 prt,它有一个参数 self,代表类的实例本身print(self)#打印出当前实例对象的内存地址,即 self 的值。print(self.__class__)#打印出当前实例所属的类对象,即 Test 类的类对象。t = Test() #调用实例方法
t.prt()#解析输出# self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:
class Test:def prt(runoob):print(runoob)print(runoob.__class__)t = Test() #调用实例方法
t.prt()#解析输出
创建实例对象
python"># 创建实例对象
# 以前学java一般用关键字new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
# "创建 Employee 类的第一个对象"
emp1 = Employee("jfh",2000)
# 二
emp2 = Employee("jgj",3000)
访问属性
python"> # 访问属性 使用点号 . 来访问对象的属性。使用如下类的名称访问类变量:emp1.displayEmployee()emp2.displayEmployee()print("Total Employee %d" % Employee.empCount)# 增删改 类的属性
emp1.age = 7
emp1.age = 8
del emp1.age
Python内置类属性
python"># Python内置类属性
# __dict__ 类的属性
# __doc__ 类的文档字符串
# __name__ 类名
# __module__ 类的定义所在模块
# __bases__ 类的所有父类构成元素# eg:
class Employee:empCount = 0def __init__(self,name,salary):self.name = nameself.salary = salaryEmployee.empCount += 1def displayEmployee(self):print("Total Employee %d" % Employee.empCount)def displayEmployee(self):print("Name : ", self.name, ", Salary: ", self.salary)
print ("Employee.__doc__:", Employee.__doc__)
print ("Employee.__name__:", Employee.__name__)
print ("Employee.__module__:", Employee.__module__)
print ("Employee.__bases__:", Employee.__bases__)
print ("Employee.__dict__:", Employee.__dict__)
python">a = 40 #创建对象
b = a #增加引用 <40> 的计数
c = [b] # 增加引用 <40> 的计数del a # 减少引用 <40> 的计数
b = 100 # 减少引用 <40> 的计数
c[0] = -1 # 减少引用 <40> 的计数# 析构函数 __del__ ,__del__在对象销毁的时候被调用,当对象不再被使用时,__del__方法运行:
# 通常你需要在单独的文件中定义一个类
#类定义
class Point:def __init__(self,x=0,y=0):#类的构造函数,用于初始化对象,self.x = xself.y = y# 析构函数def __del__(self):#类的析构函数,当对象被删除时调用。class_name = self.__class__.__name__#获取类的名称print(class_name,"销毁")
# 对象创建和引用
#创建一个 Point 类的实例 pt1。
# 调用 __init__ 方法初始化对象。
pt1 = Point()
pt2 = pt1
pt3 = pt1#打印对象的内存的地址
print(id(pt1),id(pt2),id(pt3))
# 删除对象引用
del pt1
del pt2
del pt3
类的继承
python"># 定义父类
class Parent:parentAttr = 100#类属性def __init__(self):#类的构造函数print("调用父类构造函数")#定义一个实例方法def parentMethod(self):print('调用父类方法')def setAttr(self,attr):Parent.parentAttr = attrdef getAttr(self):print("父类属性 :", Parent.parentAttr)# 定义子类
class Child(Parent):def __init__(self):print("调用子类构造方法")def childMethod(self):print('调用子类方法')c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值
类属性与方法
python">
# 类的方法 类的私有方法
class JustCounter:__secretCount = 0publicCount = 0def count(self):self.__secretCount += 1self.publicCount += 1print(self.__secretCount)counter = JustCounter
counter.count()
counter.count()
print(counter.__secretCount)# 单下划线、双下划线、头尾双下划线说明:
# __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
# _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
# __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。