类的功能
- 封装
- 继承
- 多态
封装
- 使用关键字 class 定义 Python 类,关键字后面紧跟类的名称、分号和类的实现,可以将多种方法放在一个类里,方便使用
class Turtle: # Python中的类名约定以大写字母开头
# 方法
def climb(self):
print('我正在很努力的向前爬...')
def run(self):
print('我正在飞快的向前跑...')
def bite(self):
print('咬死你咬死你!!')
def eat(self):
print('有得吃,真满足...')
def sleep(self):
print('困了,睡了,晚安,zzz')
tt = Turtle()
tt.climb()
# 我正在很努力的向前爬...
tt.run()
# 我正在飞快的向前跑...
tt.bite()
# 咬死你咬死你!!
继承
- 子类自动共享父类之间数据和方法的机制,当
继承父类后,自己如是没有像相关的方法,便可以调用父类的方法
class list:
def a(self):
print('aa')
class MyList(list): #加入括号内就为继承
pass
lst = MyList([1, 5, 2, 7, 8])
lst.a()
# 'aa'
魔法函数__init__()
- 传入不同的参数,同一个方法得到不同的结果,每次都需要重新调用类和放法
class Ball:
def __init__(self, name):
self.name = name
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
a = Ball("球A")
b = Ball("球B")
c = Ball("球C")
a.kick()
# 我叫球A,该死的,谁踢我...
b.kick()
# 我叫球B,该死的,谁踢我...
公有私有
- 定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了,私有函数不能再外部直接调用,需要在类里面再建一个方法才能私有函数调用
class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0 # 公开变量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print(self.__secretCount)
counter = JustCounter()
counter.count() # 1
counter.count() # 2
print(counter.publicCount) # 2
# Python的私有为伪私有
print(counter._JustCounter__secretCount) # 2
print(counter.__secretCount)
# AttributeError: 'JustCounter' object has no attribute '__secretCount'
class Site:
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('这是私有方法')
def foo(self): # 公共方法
print('这是公共方法')
self.__foo()
x = Site('老马的程序人生', 'https://blog.csdn.net/LSGO_MYP')
x.who()
# name : 老马的程序人生
# url : https://blog.csdn.net/LSGO_MYP
x.foo()
# 这是公共方法
# 这是私有方法
x.__foo()
# AttributeError: 'Site' object has no attribute '__foo'
单例
- 一个人改变了其中的数据,在其之后其他人拿到的数据就是被修改的数据
# 单例
class Singleton:
# 类属性 (只会初始化一次)
instance = None
# 永远开辟一片空间
def __new__(cls, *args, **kwargs):
# cls: 类名
if cls.instance == None:
cls.instance = super().__new__(cls, *args, **kwargs)
return cls.instance
p1 = Singleton()
p1.name = '张三'
p2 = Singleton()
print(p2.name) # 张三
p2.name='李四'
p3 = Singleton()
print(p3.name) # 李四