007-面向对象2

2020-05-14  本文已影响0人  痞子_4ae7

del方法

创建对象时,python解释器会默认调用__init__方法,当删除一个对象时,
    python解释器也会调用一个方法,这个方法是:  __del__()
class Animal:
    # 对象初始化时调用
    def __init__(self,name):
        self.name = name
        print(self.name+"来了")
    # 对象被回收时调用
    def __del__(self):
        print(self.name+"被妖怪抓走了")
# 创建对象,初始化 init方法调用
an = Animal("唐僧")
# 手动删除对象,之后将不能在被使用,如果使用会报错
# del an
print(an.name)
# 如果没有手动删除,对象将在使用完才被系统收走

单继承

多继承

重写父类的方法与调用父类的方法

class SuperClass():
    def __init__(self,name):
        self.name = name
    def test(self):
        print("父类的测试方法")
class SubClass(SuperClass):
    def __init__(self,name,age):
       # SuperClass.__init__(self,name)
# super(SubClass, self).__init__(name)
super().__init__(name)
        self.age  = age
    # 子类重写父类方法
    def test(self):
        print("子类的测试方法")
        print('name:'+self.name+",age:"+str(self.age))

sub = SubClass('aa',12)
sub.test()
# 执行结果
# 子类的测试方法
# name:aa,age:12

多态

class F1(object):
    def show(self):
        print("F1.show")
class S1(F1):
    def show(self):
        print("S1.show")
class S2(S1):
    def show(self):
        print("S2.show")
def func(obj):
    obj.show()

obj1 = F1()
func(obj1)
obj1 = S1()
func(obj1)
obj1 = S2()
func(obj1)

类属性、实例属性

属于类对象所拥有的属性,它被所有类对象的实例对象所公有,在内存中只有一份
class Student:
    # 类属性
    schoolName="西三旗校区"
    def __init__(self,name,age):
        # 实例属性
        self.name = name
        self.age = age
st1 = Student('陈独秀',29)
# 通过类名访问类属性
print(Student.schoolName)
# 通过对象访问类属性
print(st1.schoolName)
# 通过对象访问修改属性,会新增对象属性,之后通过对象访问类属性将无法访问到,因为会被新增的对象属性屏蔽
st1.schoolName = '京南校区'
# 类属性访问结果不变
print(Student.schoolName)
# 这只能访问到对象属性
print(st1.schoolName)
# 可以手动删除新增的对象属性
del st1.schoolName
# 因为对象属性被删除,所以,这访问的依旧是类属性
print(st1.schoolName)

静态方法和类方法

简单总结对比:

上一篇下一篇

猜你喜欢

热点阅读