面向对象编程基础
1.类和对象
定义类:
# 标识 类名 object
class class_name(object):#class_name是类名
def __init__(self):
self.a = 100
def A(self):
print(self.a)
if __name__ == "__main__":
a = class_name()#相当于走初始化__init__
a.A()#在类中调用使用
2.创建和使用对象
定义好类之后,创建对象并调用
例1 写一个进度条 ,每5%输出一个#键
import time
class jdt(object):
def __init__(self):
self.count = 1
def aa(self):
for i in range(0,100):
time.sleep(0.5)
print('%d%%\r'%(i+1),end = "",flush = True)
if i%5 == 0:
res = '#'*self.count
print('%s %d%%'%(res,(i+5)))
self.count += 1
if __name__ == "__main__":
A = jdt()
A.aa()
例2:一行输出进度条
import time
class A(object):
def jdt():
for i in range(100):
time.sleep(1)
print ('%s %d %%\r'%('#'*(i+1),i+1),end="",flush = True)
if __name__ == "__main__":
a = A()
a.jdt()
例3 读写文件并查看文件中有多少个大写字母
class dx(object):
def __init__(self):
self.count = 0
def zm(self):
with open('C:\\Users\\lenovo\\Desktop\\test.txt',mode = 'r') as f:
readlines = f.readlines()
# print(readlines)
for line in readlines:
new_line = line.strip('\n')
for i in new_line:
if i.isupper():
self.count += 1
print(self.count)
if __name__ == "__main__":
a = dx()
a.zm()
3.访问可见性问题(就是公开和私有的问题)
如果非要使用私有变量那么可以用dir(class())去查看它真正的名字
若不是必须使用私有化,并且想体现一个变量或者函数的重要性时可以使用"_"
class test(object):
def __init__(self,name):
self.__name = name#__就是私有化
def __A(self):#函数私有化
print(self.__name)
if __name__ == "__main__":
B = test()
B.__A()#会报错,私有变量不可外部调用
4.面向对象三大支柱:封装,继承和多态
封装:把数据和操作封装起来,并创建一个对象,创建一个对象之后知道方法名并传入参数调用代码。
面向对象的进阶
1.@property装饰器
通过装饰器的方法来暗示属性是被保护的
class test(object):
def __init__(self):
self.__a = 100
@property
def look(self):
return self.__a
if __name__ == "__main__":
name = test()#实例化
print(name.look)#此时函数变成了一个属性self.look
2.python的动态绑定
第一种:
class test(object):
def __init__(self):
self.__a = 100
if __name__ == "__main__":
name = test()
name._test__a = 50
name.b = 10000
print(name._test__a)
print(name.b)#类的动态绑定
第二种:
@a.setter
def a(self,new_num):
self.__a = new_num
3.静态方法和类方法(@staticmethod)
4.类的关系:继承就是让一个类从另一个类那里将属性和方法继承下来
class test(object):
def __init__(self,a1):
self.a = 100
self.a1 = a1
def A1(self):
print(A1)
class B(test):
def __init__(self,a1):
test.__init__(self,a1)
def B1(self):
print(self.a1)
if __name__ == "__main__":
b = B('lll')
b.B1()