携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!
1.抽象
|
|---|
| 抽象是隐藏多余细节的艺术。在面向对象的概念中,抽象的直接表现形式通常为类。Python基本上提供了面向对象编程语言的所有元素,如果你已经至少掌握了一门面向对象语言,那么利用Python进行面向对象程序设计将会相当容易。忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.( 就是把现实世界中的某一类东西, 提取出来, 用程序代码表示, 抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题, 而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,二是过程抽象.数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法) |
2.封装
|
|---|
| 面向对象的程序设计中,某个类把所需要的数据(也可以说是类的属性)和对数据的操作(也可以说是类的行为)全部都封装在类中,分别称为类的成员变量和方法(或成员函数)。这种把成员变量和成员函数封装在一起的编程特性称为封装。 |
2.1公有成员变量和私有成员变量
|
|---|
| Python中用成员变量的名字来区分是公有成员变量或者是私有成员变量。Python中,以两个下划线‘_ _’开头的变量都是私有成员变量,而其余的变量都属于公有成员变量。其中,私有的成员变量只能在类的内部访问,而共有的公有的成员变量可以在类的外部进行访问。 |
2.2公有方法和私有方法
|
|---|
| 类的方法是对类行为的封装。类的方法也分为公有方法和私有方法。类的私有方法只能通过对象名(在类内部也就是self)在类的内部进行访问。而公有方法可以在类的外部通过对象名进行访问。同样,公有的成员方法和私有的成员方法也是通过名字来区分的,双下划线‘__’开头的方法是私有成员方法。私有方法:只能在类的内部进行访问,对象无法访问。私有属性: 提高代码安全性,不允许别人随意修改 |
class Test(object):
def __test2(self):
print("私有方法,__test2")
def test(self):
print("普通方法test")
def _test1(self):
print("普通方法_test1方法")
self.__test2()
t = Test()
t.test()
t._test1()
![点击并拖拽以移动]()
class Test:
def __sendMsg(self):
print("---正在发送短信---")
def sendMsg(self,newMoney):
if newMoney>10000:
self.__sendMsg()
else:
print("抱歉,余额不足,请先充值!")
t = Test()
t.sendMsg(1000000000)
![点击并拖拽以移动]()
class Person(object):
def __init__(self,name,sex):
self.__name = name
self.__sex = sex
def getSex(self):
return self.__sex
def getName(self):
return self.__name
def setName(self,newName):
if len(newName)>=5:
self.__name = newName
else:
print("名字长度必须大于等于才可修改!")
xiaoming = Person("hoongfu","男")
print(xiaoming.getName())
print(xiaoming.getSex())
xiaoming.setName("xiaoming")
print(xiaoming.getName())
![点击并拖拽以移动]()
2.2.1 练习
|
|---|
| 定义一个类Person,类中有私有方法和普通方法,私有属性和普通属性能通过普通方法调用私有方法,也能通过普通方法更改私有属性。 |
class Test(object):
def test(self):
self.__sex = "保密"
print("普通公有方法test")
self.__test1()
def __test1(self):
print("私有方法__test1")
print("私有属性__sex:",self.__sex)
t = Test()
t.test()
![点击并拖拽以移动]()
3. 继承
3.1继承的概念
|
|---|
| 在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承狗 |
class Animal(object):
def eat(self):
print("----吃----")
def dirk(self):
print("----喝----")
def run(self):
print("----跑----")
def sleep(self):
print("----睡觉----")
class Dog(Animal):
'''
def eat(self):
print("----吃----")
def dirk(self):
print("----喝----")
def run(self):
print("----跑----")
def sleep(self):
print("----睡觉----")
'''
def call(self):
print("旺旺叫...")
class Cat(Animal):
def catch(self):
print("抓老鼠....")
dog = Dog()
dog.call()
dog.eat()
tom = Cat()
tom.catch()
tom.sleep()
![点击并拖拽以移动]()
class Animal(object):
def eat(self):
print("----吃----")
def dirk(self):
print("----喝----")
def run(self):
print("----跑----")
def sleep(self):
print("----睡觉----")
class Dog(Animal):
def call(self):
print("旺旺叫...")
class XiaoTq(Dog):
def fly(self):
print("----飞喽-------")
xtq = XiaoTq()
xtq.fly()
xtq.call()
xtq.eat()
![点击并拖拽以移动]()
class Cat(object):
def __init__(self,name,color="白色"):
self.name = name
self.color = color
def run(self):
print("%s -- 在跑"%self.name)
class Bosi(Cat):
def setName(self,newName):
self.name = newName
def eat(self):
print("%s -- 在吃"%self.name)
bs = Bosi("印度猫")
print(bs.name)
print(bs.color)
bs.eat()
bs.setName("波斯猫")
bs.run()
![点击并拖拽以移动]()
3.2重写父类方法与调用父类方法
|
|---|
| 所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法.使用super调用父类的方法:可以直接调用父类方法,不需要通过 父类名.父类方法名 的方式 |
class Cat(object):
def sayHello(self,name):
print("hello---1")
class Bosi(Cat):
def sayHello(self):
print("hello---2")
super().sayHello("Zhangsan")
bs = Bosi()
bs.sayHello()
![点击并拖拽以移动]()
3.3多继承
class Base(object):
def test(self):
print("----Base-----")
class A(Base):
def test(self):
print("----test1-----")
class B(Base):
def test(self):
print("----test2-----")
class C(A,B):
pass
c = C()
c.test()
print(C.__mro__)
![点击并拖拽以移动]()
4.多态
4.1多态的定义
|
|---|
| 所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。当子类和父类都存在相同的print_self()方法时,我们说,子类的print_self()覆盖了父类的print_self(),在代码运行的时候,总是会调用子类的print_self()。这样,我们就获得了继承的另一个好处: 多态。 |
class Dog(object):
def printSelf(self):
print("大家好,我是xxx,请大家多多关照!")
class XiaoTq(Dog):
def printSelf(self):
print("Hello,ereybody,我是你们的老大,我是哮天神犬!")
def exec(obj):
"""
#定义时的类型并不知道要调用哪个类的方法,
当运行时才能确定调用哪个类的方法,这种情况,我们就叫做多态
"""
obj.printSelf()
dog = Dog()
exec(dog)
xtq = XiaoTq()
exec(xtq)
![点击并拖拽以移动]()
4.2新式类和经典类的区别
|
|---|
| 新式类都从 object 继承,经典类不需要Python 2.x中默认都是经典类,只有显式继承了objectPython 3.x中默认都是新式类,经典类被移除,不必显式的继承object |
#新式类和经典类的区别
class A:
def __init__(self):
print('a')
class B(A):
def __init__(self):
A().__init__()
print('b')
b = B()
print(type(b))
![点击并拖拽以移动]()
class A():
def __init__(self):
pass
def save(self):
print("This is from A")
class B(A):
def __init__(self):
pass
class C(A):
def __init__(self):
pass
def save(self):
print("This is from C")
class D(B,C):
def __init__(self):
pass
fun = D()
fun.save()
![点击并拖拽以移动]()
👑👑👑结束语👑👑👑
