程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(2)

2023-06(2)

Python—类和实例对象

发布于2020-02-10 15:33     阅读(1106)     评论(0)     点赞(10)     收藏(5)


面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

简介:所谓的类只是一个抽象的定义,而实例则是具体的对象。它们之间的差别就想我脑海中的石头和我手中的石头一样,只有后者才真实存在。类就是一个模板,每一个类创建好之后,就是一个模板。可以用这个模板生成一个个实例对象。

新旧式类的差别

object 是 Python 为所有对象提供的 基类,提供有一些内置的属性和方法,可以使用 dir 函数查看。

新式类:以 object 为基类的类,推荐使用。

经典类:不以 object 为基类的类,不推荐使用。

在 Python 3.x 中定义类时,如果没有指定父类,默认使用 object 作为该类的基类 —— Python 3.x 中定义的类都是 新式类。

在 Python 2.x 中定义类时,如果没有指定父类,则不会以 object 作为该类的基类。

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding:utf-8 -*-
class NewClass(object):   # 可以不写object,默认就是object
    pass
  
class OldClass:
    pass
  
New = NewClass()        # 创建一个新式类的实例
Old = OldClass()        # 创建一个经典类的实例
print(type(NewClass))   # python3结果:<class 'type'>                       python2结果:<type 'type'>
print(type(New))        # python3结果:<class '__main__.NewClass'>          python2结果:<class '__main__.NewClass'>
print(type(OldClass))   # python3结果:<class 'type'>                       python2结果:<type 'classobj'>
print(type(Old))        # python3结果:<class '__main__.OldClass'>          python2结果:<type 'instance'>

在python2运行结果中,我们可以看见经典类输出很含糊,经典类属于类对象,无论是哪个类,都统一为“类”类型,实例属于实例类型,却不知道其是由哪个类创建的,所以的实例都统一为“实例”类型。

也就是说当时的类型用 classobj 和 instance 代表了所以的类和实例,无论你是哪个类,又或是哪个类创建的实例。这样的信息实在太少,而类和类型之间非常混乱。为了解决这种情况,在 python2.2 中引入了新式类,并进行了类和类型的同统一。

创建实例对象

1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding:utf-8 -*-
class NewClass(object):
    def __init__(self, age):
        self.age = age
  
# 创建方式1
obj1 = NewClass(123)              # 通过类名+(),来创建实例对象
print(obj1.age,id(obj1))          # 结果:123  140408922671424
 
# 创建方式2
obj2 = type(obj1)(321)            # 对实例来说type返回的是类对象,又可以用类对象来创建新的实例
print(obj2.age,id(obj2))          # 结果:321  140408922670360

总结的来说:在新式类中,所以的类对象都是 type 的实例。而不同的类对象又能创建出其对应的实例。

创建一个完整的类

1
2
3
4
5
6
7
8
9
10
11
12
class Person:
    def __init__(self, name, gender):
        self.__name = name       # 私有实例变量(__name)前有2个下划线
        self.gender = gender
         
    def getName(self):
        return self.__name
  
if __name__ == "__main__":
    person=Person("张三", 26
    # print(person.__name)
    print(person.getName())

https://www.liaoxuefeng.com/wiki/1016959663602400/1017496031185408



所属网站分类: 技术文章 > 博客

作者:雪儿

链接:https://www.pythonheidong.com/blog/article/230728/b78717cab6d70fac6e97/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)