1. self, cls 不是关键字
在python里面,self, cls 不是关键字,完全可以使用自己写的任意变量代替实现一样的效果
代码1
class MyTest:
myname = 'peter'
def sayhello(hello):
print "say hello to %s" % hello.myname
if __name__ == "__main__":
MyTest().sayhello()
代码1中, 用hello代替掉了self, 得到的是一样的效果,也可以替换成java中常用的this.
结论
: self和cls只是python中约定的写法,本质上只是一个函数参数而已,没有特别含义。
任何对象调用方法都会把把自己作为该方法中的第一个参数,传递到函数中。(因为在python中万物都是对象,所以当我们使用Class.method()的时候,实际上的第一个参数是我们约定的cls)
2. 类的定义可以动态修改
代码2
class MyTest:
myname = 'peter'
def sayhello(self):
print "say hello to %s" % self.myname
if __name__ == "__main__":
MyTest.myname = 'hone'
MyTest.sayhello = lambda self,name: "I want say hello to %s" % name
MyTest.saygoodbye = lambda self,name: "I do not want say goodbye to %s" % name
print MyTest().sayhello(MyTest.myname)
print MyTest().saygoodbye(MyTest.myname)
这里修改了MyTest类中的变量和函数定义, 实例化的instance有了不同的行为特征。
3. decorator
decorator是一个函数, 接收一个函数作为参数, 返回值是一个函数
代码3
def enhanced(meth):
def new(self, y):
print "I am enhanced"
return meth(self, y)
return new
class C:
def bar(self, x):
print "some method says:", x
bar = enhanced(bar)
上面是一个比较典型的应用
以常用的@classmethod为例
正常的使用方法是
代码4
class C:
@classmethod
def foo(cls, y):
print "classmethod", cls, y
这里有个疑惑的地方,不是很明白: 如果一个方法没有使用@classmethod, 那么用Class.method()的方式,是会报错的。但是@classmethod是个decorator, 那么它返回的也是一个函数,为什么这样就可以直接被Class调用了呢?
分享到:
相关推荐
1. self, cls 不是关键字 在python里面,self, cls 不是关键字,完全可以使用自己写的任意变量代替实现一样的效果 代码1 复制代码 代码如下:class MyTest: myname = ‘peter... 结论 : self和cls只是python中约定的写法
在Python中,函数参数的传递遵循一种称为“传引用的值”的模型。这意味着当我们将一个变量作为参数传递给函数时,实际上传递的是该变量所指向对象的一个引用,而不是变量本身的值。这种行为导致了两种不同的结果: ...
根据给定的信息,本文将详细解释10个在Python中被认为较难理解的概念。这些概念不仅对于初学者来说是挑战,即使是经验丰富的开发者也可能在某些方面遇到难题。下面逐一介绍这些概念及其应用。 ### 1. 面向对象编程...
Python装饰器是编程中一种强大的工具,用于在不修改源代码的情况下增强或修改函数、类的行为。装饰器的本质是函数,它可以接收一个函数作为参数,并返回一个新的函数。下面将详细介绍Python装饰器的四种类型:函数...
在Python2中,`range()`函数返回一个列表,而在Python3中,`range()`返回一个迭代器,这有助于节省内存空间。例如: ```python # Python2 print(range(5)) # 输出:[0, 1, 2, 3, 4] # Python3 print(list(range(5))...
Python中的装饰器(Decorator)是什么?请说明装饰器的作用和如何在Python中实现装饰器。 **装饰器**是Python中一种高级功能,它允许程序员修改或增强其他函数的行为而无需改变其源代码。装饰器本质上是一个接收...
2. 装饰器(Decorator):装饰器是Python中一种强大的功能,可以用来修改或增强函数、类等对象的行为,如`@classmethod`、`@staticmethod`和`@property`。`@classmethod`用于创建类方法,`@staticmethod`创建与实例...
**答案:** GIL是Python解释器中的一种锁机制,它确保在任何时刻只有一个线程在执行Python字节码。这种机制的存在主要是为了简化内存管理和其他一些内部操作,但同时也限制了Python程序的多线程执行能力。即使在多核...
【理解Python中super()和init()方法】 `super()` 函数用于调用父类的方法,特别是在多继承中。`__init__` 是构造方法,用于初始化新创建的对象。在子类中,可以使用 `super().__init__(...)` 来调用父类的 `__init_...
根据提供的文档信息,本文将详细解析《Python-经典面试题详解(共53题)》中的部分关键知识点,包括列表与元组的区别、字符串插值的方法、`is`与`==`的区别、...这些知识点对于深入理解和掌握Python编程语言至关重要。
装饰器(Decorator)是 Python 中的一种特殊类型的函数,用于修改函数的行为。装饰器可以在函数执行前后执行某些操作,例如计算执行时间、日志记录等。 在本次小作业中,我们定义了一个装饰器 `print_execute_time`...
标题中的“向Python添加类似C#的属性事件”意味着我们将探讨如何在Python中模拟C#中的属性事件。在C#中,属性不仅包含简单的getter和setter方法,还可以附带事件,当属性值改变时,这些事件可以被触发。Python虽然...
本文将深入探讨Python中的设计模式,以"patterns:python中的设计模式示例"为主题,通过分析提供的压缩包文件"patterns-master",我们将介绍一些主要的设计模式,并给出实际的代码示例。 1. **单例模式(Singleton)...
**个人理解**:在这个例子中,我们创建了一个名为`deco_cls`的类装饰器。通过定义`__init__`方法接收被装饰的函数,并定义`__call__`方法来实现实际的装饰逻辑。使用`@deco_cls`装饰`do_something`函数后,每次调用`...
Python是一种广泛使用的高级编程语言,尤其在Web开发、数据分析、人工智能等领域...以上知识点涵盖了Python的基础和进阶内容,是面试中常见的问题,理解并掌握这些知识点对于提升Python编程技能和面试成功率至关重要。
Python是一种高级编程语言,以其简洁、优雅的语法和强大的库支持而受到广泛欢迎。...以上内容涵盖了Python面试中可能遇到的多个核心概念和技巧,深入理解这些知识点对于成为一名优秀的Python开发者至关重要。
类变量,例如self , cls和mcs 经营者 突出显示以下错误: 源文件中的符号无效 无效的数字常量 字符串内的%格式无效 无效的变量名 无效的运算子 混合空格和制表符 尾随空格(已通过g:python_highlight_space_...
这意味着`foo`现在可以访问到调用它的类的`cls`参数,而不仅仅是实例对象`self`。 装饰器模式在面向对象设计中是一种结构型模式,用于在运行时向对象添加新的行为或责任。在Java中,装饰器模式通常涉及创建一系列...
在Python中,这些方法都是通过修饰器(decorator)来实现的。 1. 对象方法(Instance Method) 对象方法是与特定对象关联的方法,通常用于处理对象的状态。在Python中,对象方法的第一个参数通常是`self`,它代表...
def decorator(cls): # 对类 cls 进行处理 return new_cls_or_modified_cls ``` 这里,`cls` 是传入的原始类,而 `new_cls_or_modified_cls` 是经过处理后的类(可能是原始类本身,也可能是新的类)。 ##### 3.2...