‘‘‘ 面向对象编程--object oriented programming,简称OOP OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数 面向过程是把计算机,程序作为一系列命令集合,即一组函数的顺序执行 面向对象是把计算机程序视为一组对象的集合,而每组对象都可以接受其他对象发过来的消息,并处理这条消息, 计算机程序的执行就是这一系列消息在各个对象之间的传递 面向对象的术语: 类 类对象 实例对象 属性 函数 方法 类属性,实例属性,类方法,实例方法,以及静态方法 ‘‘‘ class Foo(): name = ‘jon‘ #定义一个类属性 __pwd = ‘123‘#定义一个私有的类属性 def __init__(self,name): # self.name = name #定义一个实例方法 def func(self): return ‘ok‘ obj = Foo(‘piki‘) #实例化一个对象 print(Foo.name) print(obj.name) # print(obj.__pwd) #私有属性在外部不能直接调用 print(obj.__dict__) #在__dict__可以看出私有属性以_类名__方法明的方式保存,目的是不想在外部调用该方法 print(Foo._Foo__pwd) ‘‘‘ 一般在类里面定义的函数与类对象或者实例对象绑定了,所以称作为方法; 而在类外定义的函数一般没有同对象进行绑定,就称为函数。 ‘‘‘ class Foo: def __func(self): #私有属性在定义阶段就发生变化,_Foo__func print(‘Foo‘) class Bar(Foo): def __func(self): #因为在定义阶段就发生了变化,所以子类不能继承父类的私有属性 print(‘Bar‘) b = Bar() b._Foo__func() b._Bar__func()
class A:
def foo(self):
print(‘A.foo‘)
self.__bar() #调用私有方法,找不到,除了自己类以外的方法
def __bar(self):
print(‘A.bar‘)
class B(A):
def __bar(self):
print(‘B.bar‘)
b = B()
b.foo()
#property,setter,deleter 类装饰器的使用
class Teacher():
def __init__(self,username,password):
if not isinstance(password,str):
raise Exception(‘密码只能是字符串‘)
self.__uname = username
self.__pwd = password
@property
def name(self):
return self.__uname
@name.setter
def name(self,val):
print(type(val))
if not isinstance(val,str):
raise TypeError(‘must be str‘)
self.__uname=val
@name.deleter
def name(self):
import re
if re.findall(‘(?i)sb‘,self.__uname): #(?i) 不区分大小写
raise PermissionError(‘SB not Deleting permissions‘)
else:
del self.__uname
egon = Teacher(‘egon‘,‘123‘)
egon.name = (‘egonSB‘)
print(egon.name)
del egon.name