2019.8.19
面向对象编程基础
类和对象
类是对象的蓝图和模板,而对象是类的实例
class Student(object):
#标识 类名
#object可以不写 #class class_name:
# 通过这个方法我们可以为学生对象绑定name和age两个属性
def __init__(self, name, age):
self.name = name
self.age = age
# __init__是一个特殊方法用于在创建对象时进行初始化操作(所有的类都必须重写init函数)
def study(self, course_name):
#self印记作用,两个对象之间可以相互调用
print('%s正在学习%s.' % (self.name, course_name))
#在类中调用需要使用'.'调用
# PEP 8要求标识符的名字用全小写多个单词用下划线连接
# 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)
# self.name是一个独立参数和name不一样
# 在函数内部调用函数用self.函数名()
# 在类中打印变量直接用print
def watch_movie(self):
if self.age < 18:
print('%s只能观看《熊出没》.' % self.name)
else:
print('%s正在观看岛国爱情大电影.' % self.name)
进度条案例
import time
class Jdt(object):
def __init__(self):
self.count = 1
def jindutiao(self):
for i in range(0,100):
time.sleep(0.1)
print('%d%%\r'%(i+1),end="",flush=True)
if i % 5 == 0:
res = '#'*self.count
print('%s %d%%\r'%(res,(i+5)),end="",flush=True)
self.count += 1
print()
if __name__ == "__main__":
jdt = Jdt()
jdt.jindutiao()
读取文件中大写字母的个数
class HWH(object):
def __init__(self,path):
count = 0
self.path = path
self.count = count
def read(self):
with open(self.path,mode='r') as f:
lines = f.readlines()
for line in lines:
new_line = line.strip('\n')
for i in new_line:
if i.isupper():
self.count += 1
print('大写字母数量为:%d'%self.count)
if __name__ == "__main__":
path = 'C:/Users/侯文涵/Desktop/test.txt'
hwh = HWH(path)
hwh.read()
类中传参
class HWH(object):
def __init__(self,num):
self.a = num
print(self.a)
if __name__ == "__main__":
hwh = HWH(10)
私有变量,私有函数
class class_name:
def __init__(self):
self.__a = 1000
def A(self):
print(self.__a)
print(self.__B())
def __B(self):
print('Hello B ')
if __name__ == "__main__":
name = class_name()
name.A()
#print(name.__a) #私有变量不可外部调用
#print(name.__B())
面向对象进阶
@property装饰器
class Person(object):
#使用装饰器,需要注意:
#1.装饰器名,函数名需要一致。
#2.property需要先声明,再写setter,顺序不能倒过来
#3.如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
#4.如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器
def __init__(self, name, age):
self._name = name
self._age = age
# 访问器 - getter方法
@property
def name(self):
return self._name
# 访问器 - getter方法
@property
def age(self):
return self._age
# 修改器 - setter方法
@age.setter
def age(self, age):
self._age = age
def play(self):
if self._age <= 16:
print('%s正在玩飞行棋.' % self._name)
else:
print('%s正在玩斗地主.' % self._name)
def main():
person = Person('王大锤', 12)
person.play()
person.age = 22
person.play()
# person.name = '白元芳' # AttributeError: can't set attribute
if __name__ == '__main__':
main()
单继承
#单继承
class A(object):
def __init__(self,a1):
self.a = 1000
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('hwh')
b.B1()