python类中的特殊方法

133 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

类中的特殊方法:

1.类方法

实例方法:访问类属性,也可以访问实例属性

类方法:在类中的方法前面添加装饰器:@classmethod,这个方法成为了类方法

 注意:在类方法中只能访问类属性,不能访问实例属性

Why?

类方法中第一个形参,并不是引用对象本身,而是引用类,也就是类本身 。 第一个形参本质上就不是self,先写@classmethod装饰器,再写方法时 开发工具自动添加的第一个形参是cls,通过类本身,只能访问到类属性,而不能访问实例属性

Python中:对象名.属性名 = 表达式

1>属性不存在,则给对象添加了一个属性

2>属性存在,则修改对象的属性值

应用场景?

封装类属性,在类的方法中专门用来访问类属性,“专职专方法”

2.静态方法

C++|Java,静态方法 static ,只能访问静态属性,不能访问实例属性、

使用方法:

在类主体中的方法前面添加一个装饰器:@staticmethod,此方法就成为了静态方法

注意:静态方法是被“隔离”的方法,在静态方法中不能访问类的成员,也不能访问对象的成员。

why?

静态方法第一个形参不是self,也不是cls。

来个例子:

class Employee:

    emp_count = 0

    def __init__(self):

        self.salary = 6000

        self.name = "Tom"

 

    @staticmethod

    def show():

        # 静态方法第一个形参不是self,也不是cls

        # print("name= ",self.name)

        # print("count =",cls.emp_count)

        print("我就是一个被隔离的静态方法")

 

 

emp = Employee();

emp.show()
3.属性方法
使用方法:

在类的主体中的方法前面添加一个装饰器:@property,这个方法就变成了属性方法。 此方法的调用格式不是函数调用格式,而使用属性访问方式调用此方法。

来个例子:

class Student:

    def __init__(self,name,age):

        self.__name = name

        self.__age = age

 

    # 属性的访问器使用属性方法来定义

    # 属性方法名 = 属性名的第一个字母大写

    @property

    def Name(self):

        return self.__name

    @Name.setter

    def Name(self,name):

        self.__name = name