python中的类和对象

目录

创建类

创建对象

使用实例方法

类属性、类方法、静态方法

类属性

类方法、静态方法


创建类

python中使用class创建类,如 

class Student: #Student为类的名称,由一个或者多个单词组成
    pass#占位符

python中一切皆对象,student也是对象,叫类对象

  • 类的组成
    • 类属性
    • 实例方法
    • 静态方法
    • 类方法
class Student:
    native_pace = '江西'  # 直接写在类里面并且不在方法里的变量叫类属性

    # init初始化方法
    def __init__(self, name, age):
        self.name = name  # self.name称为实体属性,这里是赋值操作,
        self.age = age    # self.后面的也可以随意定义,但是我们一般就用变量

    # 实例方法,在类里面定义的def是实例方法,在类外面定义的def是函数
    def eat(self):        
        # 括号内的'self'必须写上,就算没有写上,系统就会报错,但是可以换成别的名字 
        # 但是程序员习惯上就是用self,pycharm里面默认是self
        print('慢蜗牛在吃饭')

    # 静态方法
    @staticmethod
    def s_method():
        # 静态方法中不用写self
        print('使用了staticmethod,所以是静态方法')

    # 类方法
    @classmethod
    def c_method(cls):
        # 如实例方法一样,cls不能省略
        print('使用了classmethod,所以是类方法') 

到这里为止,我们的类就创建完毕了,这里只是一个模板

创建对象

# 创建Student类的对象
sws = Student('慢蜗牛', 20)  # 这里要和前面创建的init初始化方法部分的格式一样
print(id(sws))  # 内存空间
print(type(sws))  # 类型
print(sws)  # 打印sws

我们看看输出结果

2153006374672
<class '__main__.Student'>
<__main__.Student object at 0x000001F5492E1F10>

我们这里把第一行的2153006374672十进制数转换成十六进制数可以发现等于第三行的0x000001F5492E1F10

所以我们打印对象是打印出这个对象在内存中的地址

使用实例方法

sws.eat()  # 对象名.方法名()
print(sws.name)
print(sws.age)

Student.eat(sws)  # 类名.方法名(类的对象)——和实例方法格式一一对应
# 实例方法中的self就是自身的意思,就是对象本身

使用时我们用点号'.'来进行使用

慢蜗牛在吃饭
慢蜗牛
20
慢蜗牛在吃饭

类属性、类方法、静态方法

类属性:直接写在类里面并且不在方法里的变量,会被该类的所有对象所共享,比如我们前面定义的native_pace = '江西'中的native_pace

类方法:使用@classmethod修饰的方法,可使用类名直接访问

静态方法:使用@staticmethod修饰的方法,可使用类名直接访问

类属性

# 类属性的使用方式
print(Student.native_pace)
sws_1 = Student('慢蜗牛', 20)
sws_2 = Student('ssn', 21)
print(sws_1.native_pace)
print(sws_2.native_pace)# 类属性被所有对象所共享

我们使用类属性依旧用点号'.'来进行,并且最后两行输出应该为一致的,依靠的就是共享

江西
江西
江西

再举个例子来看看共享作用,我们在这段代码之后修改一下类属性

Student.native_pace = '陕西'
print(sws_1.native_pace)
print(sws_2.native_pace)

来看看输出

陕西
陕西

这样是不是可以很明显的了解到共享是什么了呢

我们类的对象中都包含了类指针,类指针都指向类,如图所示

其实类属性就相当于一个班级里的公共财产,比如班级里的电脑,每个同学都可以使用

但是如果电脑坏了或者更改了设置,那么每个同学使用的时候也是更改了之后的

类方法、静态方法

类方法:使用@classmethod修饰的方法,可使用类名直接访问

静态方法:使用@staticmethod修饰的方法,可使用类名直接访问

# 类方法的使用方式
Student.c_method()

# 静态方法的使用方式
Student.s_method()

类方法不用调用参数,静态方法无参数,也不需要调用

使用了classmethod,所以是类方法
使用了staticmethod,所以是静态方法

 

posted @ 2023-06-12 11:24  放氮气的蜗牛  阅读(38)  评论(0编辑  收藏  举报  来源