python基础-类与对象(2)

pytyhon基础——类与对象(1)
点击即可访问(在另一篇文章中)
一、对象
二、面向对象(oop)
三、类的详解
1.类简介:
2.类的创建
3.类的继承
4.类的封装

四、类的继承与重写

1.继承

 继承是面向对象三大特性之一
- 通过继承我们可以使用一个类获取到其他类中的属性和方法
- 在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super)
- 子类(衍生类)可以直接继承父类中的所有的属性和方法
注意事项:
  a.在创建类时,如果省略了父类,则默认父类为object, object是所有类的父类,所有类都继承自object。
  b. isinstance()用来检查一个对象是否是一个类的实例

如果这个类是这个对象的父类,也会返回True
所有的对象都是object的实例

2.多重继承

在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类
可以在类名的()后边添加多个类,来实现多重继承
多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法
如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个。。。前边父类的方法会覆盖后边父类的方法。
注意:
类名.__bases__ 这个属性可以用来获取当前类的所有父类    

多重继承示例:


class A(object):
    def test(self):
        print('AAA')

class B(object):
    def test(self):
        print('B中的test()方法~~')

    def test2(self):
        print('BBB') 

class C(A,B):
    pass
c = C()
c.test()

# 执行结果:AAA

查询流程图
在这里插入图片描述

3.重写

在调用流程中我们会发现有先使用本地的方法和属性,我们可以在子类中重写父类中定义过的方法。
在子类中定义的方法,父类中相同方法不调用,即达成重写的目的。 

五、类的多态

多态是面向对象的三大特征之一
一个对象可以以不同的形态去呈现
 多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果

多态优势:
 可以 增加代码的灵活度
以 继承 和 重写父类方法 为前提
是调用方法的技巧,不会影响到类的内部设计

链接:
面向对象的三大特征:
封装 - 确保对象中的数据安全
继承 - 保证了对象的可扩展性
多态 - 保证了程序的灵活性

六、特殊方法

↑↑ 点击上方查看特殊方法详解:谷歌浏览器可以直接翻译成中文 ↑↑
特殊方法:也称为魔术方法
特殊方法都是使用__开头和结尾的
特殊方法一般不需要我们手动调用,需要在一些特殊情况下自动执行

# 常用的两个特殊方法对比:
# 定义一个Person类
class Person(object):
    """人类"""
    def __init__(self, name , age):
        self.name = name
        self.age = age
#__str__()这个特殊方法会在尝试将对象转换为字符串的时候调用
# 它的作用可以用来指定对象转换为字符串的结果  (print函数)  
 def __str__(self):
        return 'Person [name=%s , age=%d]'%(self.name,self.age)        
 # __repr__()这个特殊方法会在对当前对象使用repr()函数时调用
 # 它的作用是指定对象在 ‘交互模式’中直接输出的效果    
 def __repr__(self):
        return 'Hello'        

常见计算的特殊方法:

object.__add__(self, other)
    # object.__sub__(self, other)
    # object.__mul__(self, other)
    # object.__matmul__(self, other)
    # object.__truediv__(self, other)
    # object.__floordiv__(self, other)
    # object.__mod__(self, other)
    # object.__divmod__(self, other)
    # object.__pow__(self, other[, modulo])
    # object.__lshift__(self, other)
    # object.__rshift__(self, other)
    # object.__and__(self, other)
    # object.__xor__(self, other)
    # object.__or__(self, other)

    # object.__lt__(self, other) 小于 <
    # object.__le__(self, other) 小于等于 <=
    # object.__eq__(self, other) 等于 ==
    # object.__ne__(self, other) 不等于 !=
    # object.__gt__(self, other) 大于 >
    # object.__ge__(self, other) 大于等于 >= 

七、属性和方法总结

# 定义一个类
class A(object):

#类属性
#实例属性
# 类方法
# 实例方法
# 静态方法

    # 类属性,直接在类中定义的属性是类属性
    #   类属性可以通过类或类的实例访问到
    #   但是类属性只能通过类对象来修改,无法通过实例对象修改
    count = 0

    def __init__(self):
        # 实例属性,通过实例对象添加的属性属于实例属性
        #   实例属性只能通过实例对象来访问和修改,类对象无法访问修改
        self.name = '嘻嘻哈哈'

    # 实例方法
    #   在类中定义,以self为第一个参数的方法都是实例方法
    #   实例方法在调用时,Python会将调用对象作为self传入  
    #   实例方法可以通过实例和类去调用
    #       当通过实例调用时,会自动将当前调用对象作为self传入
    #       当通过类调用时,不会自动传递self,此时我们必须手动传递self
    def test(self):
        print('这是test方法~~~ ' , self)    

    # 类方法    
    # 在类内部使用 @classmethod 来修饰的方法属于类方法
    # 类方法的第一个参数是cls,也会被自动传递,cls就是当前的类对象
    #   类方法和实例方法的区别,实例方法的第一个参数是self,而类方法的第一个参数是cls
    #   类方法可以通过类去调用,也可以通过实例调用,没有区别
    @classmethod
    def test_2(cls):
        print('这是test_2方法,他是一个类方法~~~ ',cls)
        print(cls.count)

    # 静态方法
    # 在类中使用 @staticmethod 来修饰的方法属于静态方法  
    # 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用  
    # 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
    # 静态方法一般都是一些工具方法,和当前类无关
    @staticmethod
    def test_3():
        print('test_3执行了~~~')
发布了61 篇原创文章 · 获赞 283 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42767604/article/details/105201257
今日推荐