1.保护对象的属性
class Person(object):
def __init__(self, name, age):
self.__name = name
self.age = age
def setName(self, name):
if len(name) >= 3:
self.__name = name
else:
print("名字不合法,要大于等于3位!")
def getName(self):
return self.__name
p = Person("AAA", 20)
p.setName("JasonPer")
print(p.getName())
print(p.age)
p.setName("AA")
print(p.getName())
打印结果如下:
JasonPer
20
名字不合法,要大于等于3位!
JasonPer
总结:
- Python中没有像C++中public和private这些关键字来区分公有属性和私有属性
- 它是以属性命名方式来区分的,如果在属性名前加了两个下划线 '__' ,则表明该属性是私有属性,否则就是公有属性(方法也是一样,方法前加了2个下划线表示该方法是私有的,否则就是共有的)
2.继承
理解:子承父
class Animal(object):
def __init__(self, name):
self.name = name
def eat(self):
print("动物可以吃东西")
class Cat(Animal):
def __init__(self, name, age):
Animal.__init__(self, name)
self.age = age
def run(self):
print("猫会跑")
cat = Cat("xiaomao", 7)
cat.eat()
cat.run()
打印结果如下:
动物可以吃东西
猫会跑
总结:
- 子类在继承的时候,在定义类时,小括号()中为父类的名字
- 父类的属性和方法,会被继承给子类
- 私有的属性,不能通过对象直接访问,但是可以通过方法访问
- 私有的方法,不能通过对象直接访问
- 私有的属性和方法,不会被子类继承,也不能被访问
- 一般情况下,私有的属性和方法都是不对外公布的,往往是用来做内部的事情,起到安全作用
3.多继承
- 多继承
# 多继承
class A(object):
def test(self):
print("***A***")
class B(object):
def test(self):
print("***B***")
class C(A, B):
# def test(self):
# A.test(self)
pass
c = C()
c.test()
print(C.mro())
打印结果如下:
A
[<class 'main.C'>, <class 'main.A'>, <class 'main.B'>, <class 'object'>]
- 重写
子类继承父类,子类拥有和父类相同的方法时,父类的同名方法被子类重写
# 重写
class Base(object):
def sayHello(self):
print("sayHello")
class Say(Base):
def sayHello(self):
print("Hello,Python")
s = Say()
s.sayHello()
打印结果如下:
Hello,Python
- 调用父类方法的3种方式
# 调用父类方法的3种方式
class A(object):
def test(self):
print("***A***")
class B(A):
def test(self):
# 方式1
# A.test()
# 方式2
# super(B,self).test()
# 方式3
super().test()
b = B()
b.test()
4.多态
多态的概念应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”
所谓多态,定义时的类型和运行时的类型不一样,此时就成为多态
class A(object):
def show(self):
print("a.show")
class B(A):
def show(self):
print("b.show")
class C(A):
def show(self):
print("c.show")
class D(object):
def show(self):
print("d.show")
a = A()
a.show()
b = B()
b.show()
c = C()
c.show()
d = D()
d.show()
打印结果如下:
a.show
b.show
c.show
d.show
在Python 中,有着相同的方法属性,就可以理解为多态
5.类属性和实例属性
class Person(object):
# 类属性
name = "张三"
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("李四", 12)
print(p.name)
print(Person.name)
Person.name = "王五"
print(Person.name)
打印结果如下:
李四
张三
王五
6.类方法和静态方法
- 类方法
与类属性相似,Python也有类(使用@classmethod)
# 类方法
class Person(object):
@classmethod
def show(cls):
print("类方法")
p = Person()
p.show()
Person.show()
打印结果如下:
类方法
类方法
- 静态方法(使用@staticmethod)
# 静态方法
class Person(object):
@staticmethod
def show():
print("静态方法")
p = Person()
p.show()
Person.show()
打印结果如下:
静态方法
静态方法