文章目录
五、核心知识梳理
9.面向对象之成员修饰符
9.4 静态方法
class test:
def __init__(self,name):
self.s_name = name
@staticmethod
def test_func(para):
return para
print (test.test_func('abc')) # 静态方法通过类进行访问
给test_func函数加上私有
class test:
def __init__(self,name):
self.s_name = name
@staticmethod
def __test_func(para): # 加上私有下划线__
return para
print (test.test_func('abc'))
用类中的其他方法调用私有函数
class test:
def __init__(self,name):
self.s_name = name
@staticmethod
def __test_func(para):
return para
def test_func01(self):
return test.__test_func(self.s_name)
obj =test('abc')
print (obj.test_func01())
9.5 普通方法
私有函数
class test:
def __init__(self,name):
self.s_name = name
def __test_func(self):
return self.s_name
obj =test('abc')
print (obj.__test_func())
用类中的方法调用私有函数
class test:
def __init__(self,name):
self.s_name = name
def __test_func(self):
return self.s_name
def test_func01(self):
return self.__test_func() # 返回用过私有修饰符修饰过的普通方法的返回值
obj =test('abc')
print (obj.test_func01())
总结:通过私有修饰符进行修饰后的成员,只能被自己访问
10.面对对象之类的特殊成员call、setitem、getitem、delitem
10.1 call
class test:
def __init__(self,name):
self.s_name = name
def func(self):
print (self.s_name)
def __call__(self):
return 'call'
obj = test('abc')
print (obj) # obj是一个实例化后的对象
print (obj()) # 直接是对象加上括号,这种执行方式,就是执行对象中的__call__方法
10.2 setitem、getitem、delitem
- getitem
class test:
def __init__(self,name):
self.s_name = name
def func(self):
print (self.s_name)
def __getitem__(self, para):
return para
obj = test('abc')
print (obj['get_item'])
# 通过对象名[para]的方式,是访问对象中的__getitem__方法
- setitem
class test:
def __init__(self,name):
self.s_name = name
def func(self):
print (self.s_name)
def __setitem__(self, key, value):
print(key, value)
obj = test('abc')
obj['get_item']= '123'
# 通过对象名[key]=value的方式,是访问对象中的__setitem__方法,
# 其中的set_item这个值传给__setitem__中的key,123传给__setitem__中的value
- delitem
class test:
def __init__(self,name):
self.s_name = name
def func(self):
print (self.s_name)
def __delitem__(self, key):
print (key)
obj = test('abc')
del obj['get_item']
# 通过del 对象名[key]的方式访问对象中的__delitem__方法,其中的get_item这个值传给了__delitem__中的key
总结
obj[‘get_item’] #getitem
obj[‘get_item’] = ‘123’ #setitem
del obj[‘get_item’] #delitem
11.面向对象之类的特殊成员dict
class test:
def __init__(self,name):
self.s_name = name
def func(self):
print (self.s_name)
def __delitem__(self,key):
print (key)
obj = test('abc')
print (test.__dict__) # 输出类test中的__dict__
print (obj.__dict__) # 输出对象obj中的__dict__
输出结果
{'__module__': '__main__', '__init__': <function test.__init__ at 0x0000022236E08708>, 'func': <function test.func at 0x0000022236E08DC8>, '__delitem__': <function test.__delitem__ at 0x0000022236E08948>, '__dict__': <attribute '__dict__' of 'test' objects>, '__weakref__': <attribute '__weakref__' of 'test' objects>, '__doc__': None}
{'s_name': 'abc'}
12.面向对象之类的特殊成员tier
import time
class test:
def __init__(self):
pass
def __iter__(self):
yield 1
time.sleep(3)
yield 2
time.sleep(3)
yield 3
obj = test()
for i in obj: # for循环对象obj
print (str(i) + ' number')
如果对对象执行for循环即为循环对象时会自动执行对象中的iter方法,生成器返回值
六、面向对象的支柱
面向对象有三大支柱:封装、继承和多态。
封装:隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口
封装的例子:
类中定义的方法:把数据和数据的操作封装起来