那些被渐渐遗忘的python知识点(二)

前言

  正所谓:时运则存,不用则亡,这些有关python的知识点你还记得多少。

1. @property

  @property装饰器会将方法转换为相同名称的只读属性,即使用@property装饰器修饰的方法调用时不需要加(),可以与所定义的属性配合使用,这样可以防止属性被修改。

class A:
    def __init__(self):
        self.name = 'xiaoyou'
        self.age = 3
        self.__height = 20
        self.__weight = 10
        
    def height(self):
        return self.__height
   
    @property
    def weight(self):
        return self.__weight

if __name__ == "__main__":
	obj_a = A()
	print(obj_a.height())	# 本质上调用的是私有属性,但方式是实例的方法
	print(obj_a.weight)	# 不需要加 (), 即说明调用的是类中的属性

2. @classmethod

  @classmethod将函数转换成为一个类方法,最常见的用途是定义备选构造方法,即调用@classmethod修饰的函数来完成实例的初始化。

class A:
    def __init__(self):
        self.name = 'xiaoyou'
    
    @classmethod
    def hello(cls):
        print("hello, xiaoyou!")

if __name__ == "__main__":
	A.hello()	# 不需要实例化

3. @staticmethod

  @staticmethod将函数转换成为一个静态方法,不需要先声明实例对象,可通过类本身直接调用,就像调用普通的函数那样。

class A:
    def __init__(self):
        self.name = 'xiaoyou'
    
    @staticmethod
    def hello(name):	# 既不需要传递类对象cls也不需要传递实例对象self
        print("hello, {}!".format(name))

if __name__ == "__main__":
	blog_name = "xiaoyou"

	obj_A = A()		# 实例化
	obj_A.hello(blog_name)
	
	A.hello(blog_name)	# 也可以不实例化

  以上是python中内置的三个装饰器,目前也就这三个:
  (1) @staticmethod:把函数转换成静态方法
  (2) @classmethod:把函数转换成类方法
  (3) @property:把函数转换成成类的属性

4. self与cls

  self 指的是实例,而cls指的是类,使用 self 关键字,我们可以访问实例变量和类属性,而使用cls关键字,我们只能访问类的成员。
  self 作为参数传递给实例方法,而cls作为参数传递给类方法,如果我们使用self初始化变量,它们的作用域就是实例的作用域。但是,使用cls初始化的变量将类作为其作用域。

  selfcls 没有特别的含义,作用只是把参数绑定到普通的函数上, 不一定非得是selfcls ,可以换成别的xxx

猜你喜欢

转载自blog.csdn.net/qq_42730750/article/details/128186360