类和对象
类是对象的蓝图和模板,而对象是类的实例
定义类:格式
# __init__是一个特殊方法用于在创建对象时进行初始化操作
class class_name(object):
def __init__(self):
pass
def A(self): # 在类中,一切的变量和函数都要印记(self)
pass
if __name__ =="__main__":
a = class_name() # 实例,类名带括号,直接运行初始化函数
a.A()
例子
# 进度条
import time
class Jindutiao (object):
def __init__(self):
pass
def Jindu(self):
for i in range(1,101):
time.sleep(0.5)
print("#" * i,"%d %%" % i)
if __name__ == "__main__":
a = Jindutiao()
a.Jindu()
运行结果
# 读取文档并计算文档中有多少大写字母
class Num(object):
def __init__(self,path):
self.path = path
self.count = 0
def Str(self):
with open (self.path,mode="r") as f:
readlines = f.readlines()
for line in readlines:
new_line = line.strip("\n")
for i in new_line:
if i.isupper():
self.count += 1
print("The upper word is %d"%self.count)
if __name__ =="__main__":
path = "\\Users\\小仙女\\Desktop\\123.txt"
a = Num(path)
a.Str()
运行结果
访问可见性
- 私有变量,变量名前面加"__"
- 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字
- 私有变量/函数,在类内部可以直接调用.
- 如果你想体现一个变量/函数特别重要你可以使用"_"
@property装饰器
- 访问器:@property
- 修改器:@变量名.setter
例子
class Person(object):
def __init__(self, name, age):
self._name = name
self._age = age
# 访问器
@property
def name(self):
return self._name
# 访问器
@property
def age(self):
return self._age
# 修改器
@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()
if __name__ == '__main__':
main()
运行结果
__slots__魔法
__slots__的限定只对当前类的对象生效,对子类并不起任何作用
例子
class Person(object):
# 限定Person对象只能绑定_name, _age和_gender属性
__slots__ = ('_name', '_age', '_gender')
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@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('王大锤', 22)
person.play()
person._gender = '男'
if __name__ == '__main__':
main()
运行结果
静态方法和类方法
类方法
- 定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法)
- 调用:实例对象和类对象都可以调用。
静态方法
- 定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
- 调用:实例对象和类对象都可以调用
继承
单继承
子类在继承的时候,在定义类时,小括号()中为父类的名字
Object是所有类的根类
父类的属性、方法,会被继承给子类
注意:
- 私有的属性,不能通过对象直接访问,但是可以通过公有方法访问
- 私有的方法,不能通过对象直接访问
- 私有的属性、方法,不会被子类继承,也不能被访问
- 一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用
例子
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('hahaha')
b.B1()
运行结果