面向对象编程基础
面向对象的三大要素:封装、继承和多态。
类和对象
- 类是对象的蓝图和模板
- 对象是类的实例
定义类
- 使用class关键字定义类
class class_name(object):
def __init__(self):
self.a = 1000
def Tom(self):
print(self.a)
if __name__ == "__main__":
tom = class_name()
tom.Tom()
注意:
- object在Python3中可写可不写
- __ init __是一个特殊的方法用来在创建对象时进行初始化
#打印进度条
import time
class Tom(object):
def __init__(self):
self.a = 1
def tiao(self):
for i in range(0,100):
time.sleep(0.5)
print('%d%%\r'%(i+1),end="",flush=True)
if i % 5 ==0:
der = '#'*self.a
print('%s %d%%\r'%(der,(i+5)),end="",flush=True)
self.a += 1
#print()
if __name__ == "__main__":
W = Tom()
W.tiao()
#查找大写字母的个数
class Tom(object):
def __init__(self):
self.count = 0
def co(self):
with open('C:\\Users\\MacBook\\Desktop\\test.txt',mode='r')as f:
read = f.readlines()
for line in read:
new_line = line.strip('\n')
for i in new_line:
if i.isupper():
self.count +=1
print("大写字母的个数%d"%self.count)
if __name__ == "__main__":
tom = Tom()
tom.co()
访问可见性问题
- 私有变量,变量名前加"__"
- 使用dir(class())查看真正的名字
@property装饰器
- 想要访问有权限的属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。
class Tom(object):
def __init__(self):
self.__a = 10000
@property
def a(self):
return self.__a
@a.setter
def a(self,num):
self.__a = num
if __name__ == "__main__":
tom = Tom()
tom.a = 200
print(tom.a)
类的动态绑定
eg1:
class Dw(object):
def __init__(self):
self.__a = 100
@property
def a(self):
return self.__a
@a.setter
def a(self,new_num):
self.__a = new_num
if __name__ == "__main__":
tom = Dw()
tom.a = 2000
print(baibai.a)
#类的多态绑定
tom.b = 5000
print(tom.b)
运行结果:
2000
5000
- 静态方法和类方法
静态方法和类方法都是通过给类发消息来调用的
eg1:
class com_(object):
def __init__(self):
self.__a = 100
@staticmethod
def A():
print("lalala")
if __name__ == "__main__":
ww = com_()
ww.A
#类的动态绑定
ww.b = 5200
print(ww.b)
运行结果:
5200
- 继承和多态
可以在已有类的基础上创建新类,做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。
eg1:
class A(object):
def __init__(self,a1):
self.a = 100
self.a1 = a1
def A1(self):
print("A1")
class B(A):
def __init__(self,a1):
A.__init__(self,a1)
pass
def B1(self):
print(self.a1)
if __name__ == "__main__":
b = B("haha")
b.B1()
私有变量和私有函数不可以被继承