十分钟领悟Python的类和对象,你还不来看看?

首先Python是一种面向对象编程的语言,并且面向对象编程的语言有三大特征:封装、继承、多态。所以学Python的入门关键就要掌握好这几点。

1、封装

封装很好理解,简单来说就是将数据封装到一个列表里,就是数据封装。
将一部分代封装成一个函数,就是代码封装。
那么将属性和方法进行封装,就可以得到对象了。

首先我们就可以先定义一个类,而这个类中就有属性和方法。

class XiaoMing:
    #属性
    height = 180
    weight = 65
    sex = '男'
    #方法
    def run(self):
        print('小明在跑步')
    def sleep(self):
        print('小明在睡觉')

定义完类后就创建了一个类对象,而它就是对类定义创建的命名空间进行了一个包装。

值得注意的是类对象支持两种操作:属性引用和实例化。

属性引用的语法就是一般的标准语法:obj.name。比如XiaoMing.height和XiaoMing.run就是属性引用,前者会返回一条数据,而后者会返回一个方法对象。

In[1]:print(XiaoMing.height)
Out[1]:180

In[2]:print(XiaoMing.run)
Out[2]:<function XiaoMing.run at 0x0000021C6239D0D0>

这里也支持对类属性进行赋值操作,比如为类中的weight属性赋予一个新值。

In[3]:print(XiaoMing.weight)
Out[3]:65

In[4]:XiaoMing.weight = 100
In[5]:print(XiaoMing.weight)
Out[5]:100

而类的实例化可以将类对象看作成一个无参函数的赋值给一个局部变量。
如下:

In[6]:ming = XiaoMing()

ming就是由类对象实例化后创建的一个实例对象,通过实例对象也可以调用类中的属性和方法。

In[7]:ming.run()
Out[7]:小明在跑步

In[8]:print(xiaoming.height)
Out[8]:180
#通过向类对象调用方法返回的方法对象中传入实例对象也可以达到同样效果。
In[11]:XiaoMing.run(ming)
Out[11]:小明在跑步

__init__方法

但是一般类在实例化过程中都不会那么简单,一般情况下类都会倾向将实例对象创建为有初始状态。

所以在类中可能会定义一个__init__方法可以帮助接收、传入参数。
而一个类如果定义了__init__方法,那么在类对象实例化的过程中就会自动为新创建的实例化对象调用__init__方法,
就比如:

class Coordinates:
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def print_coor(self):
        print('当前坐标为(%s,%s)'%(self.x,self.y))

可以看到在__init__()中传入了参数x和y,然后在print_coor中需要接收参数x和y,可以通过实例化这个类对象,验证一下参数是否能通过__init__()传递到类的实例化操作中。

In[9]:coor = Coordinates(5,3)
In[10]:coor.print_coor()

Out[10]:当前坐标为(5,3)

继承

继承就是一个新类在另一个类的基础上构建而成,这个新类被称作子类或者派生类,而另一个类被称作父类、基类或者超类,而子类会继承父类中已有的一些属性和方法。就像儿子继承父亲的能力这样。

class Mylist(list):
    pass
list_ = Mylist()
list_.append(1)
print(list_)
'''
[1]
'''

比如这个例子,虽然没有将list_定义成一个列表,但它却能调用append方法。
其实是因为类Mylist继承于list这个基类,而list_又是Mylist的一个实例化对象,所以list_也会拥有父类list拥有的方法。

当然我们也可以通过自定义类的形式实现两个类之间的继承关系,我们定义Parent和Child两个类,Child中没有任何属性和方法,只是继承于父类Parent。

class Parent:
    def par(self):
        print('父类方法')
class Child(Parent):
    pass
child = Child()
child.par()
'''
父类方法
'''

覆盖

当子类中定义了与父类中同名的方法或者属性,就会自动覆盖父类对应的方法或属性,就比如:

class Parent:
    def par(self):
        print('父类方法')
class Child(Parent):
    def par(self):
        print('子类方法')
child = Child()
child.par()
'''
子类方法
'''

可以看到子类Child中多了一个和父类Parent同名的方法,再实例化子类并调用这个方法时,最后调用的是子类中的方法。Python中继承也允许多重继承,也就是说一个子类可以继承多个父类中的属性和方法,但是这类操作会导致代码混乱,所以一般情况下不推荐使用这个方法。

多态

多态比较简单,比如定义两个类,这两个类没有任何关系,只是两个类中有同名的方法,而当两个类的实例对象分别调用这个方法时,不同类的实例对象调用的方法也是不同的。

class XiaoMing:
    def introduce(self):
        print("我是小明")
class XiaoHong:
    def introduce(self):
        print("我是小红")

上面这两个类中都有introduce方法,我们可以实例化一下两个类,利用实例对象调用这个方法实现一下多态。

In[12]:ming = XiaoMing()
In[13]:hong = XiaoHong()

In[14]:ming.introduce()
Out[14]:我是小明

In[15]:hong.introduce()
Out[15]:我是小红

常用BIF

1、issubclass(class,classinfo)
判断一个类是否是另一个类的子类,如果是则返回True,反之则返回False。

class Parent:
    pass
class Child(Parent):
    pass
print(issubclass(Child,Parent))
'''
True
'''

注意:
①第二个参数不仅可以传入类,也可以传入由类组成的元组。
②一个类被判定为自身的子类,也就是说这两个参数传入同一个类时,也会返回True。

print(issubclass(Parent,Parent))
'''
True
'''

2、isinstance(object,classinfo)
判断一个对象是否为一个类的实例对象,如果是则返回True,反之则返回False。

class Parent:
    pass
class Child:
    pass
p = Parent()
c = Child()
print(isinstance(p,Parent,Child))
#True
print(isinstance(c,Parent))
#False

注意:
①第二个参数不仅可以传入类,也可以传入由类组成的元组。
②如果第一个参数传入的不是一个对象,则总是返回False。

3、hasattr(object,name)
判断一个实例对象中是否包含一个属性,如果是则返回True,反之则返回False。

class Parent:
    height = 100
p = Parent()
print(hasattr(p,'height'))
'''
True
'''

这里需要注意的是第二个参数name必须为字符串形式传入,如果不是则会返回False。

像这样将这些类和对象的相关知识理解后,就能更好的理解函数和方法的使用了。所以要花上十分钟的时间阅读就能帮助理解Python的类和对象的学习。

然后呢 在这里还是要推荐下我自己建的Python学习交流群:645415122,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

**以下内容无用,为本篇博客被搜索引擎抓取使用
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫
python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱
python 基础教程 网络爬虫 python python 爬虫经典例子
python 爬虫
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)( ̄︶ ̄)( ̄︶ ̄)
以上内容无用,为本篇博客被搜索引擎抓取使用

猜你喜欢

转载自blog.csdn.net/pyjishu/article/details/115120811