Python Class 的实例方法/类方法/静态方法
实例方法、类方法、静态方法
class MyClass(object):
class_name = "MyClass" # 类属性, 三种方法都能调用
def __init__(self):
self.instance_name = "instance_name" # 实例属性, 只能被实例方法调用
self.class_name = "instance_class_name"
def get_class_name_instancemethod(self): # 实例方法, 只能通过实例调用
# 实例方法可以访问类属性、实例属性
return MyClass.class_name
@classmethod
def get_class_name_classmethod(cls): # 类方法, 可通过类名.方法名直接调用
# 类方法可以访问类属性,不能访问实例属性
return cls.class_name
@staticmethod
def get_class_name_staticmethod(): # 静态方法, 可通过类名.方法名直接调用
# 静态方法可以访问类属性,不能访问实例属性
return MyClass.class_name
def instance_visit_class_attribute(self):
# 实例属性与类属性重名时,self.class_name优先访问实例属性
print "实例属性与类属性重名时,优先访问实例属性"
print "self.class_name:", self.class_name
print "MyClass.name:", MyClass.class_name
if __name__ == "__main__":
MyClass.class_name = "MyClassNew"
intance_class = MyClass()
print "instance method:", intance_class.get_class_name_instancemethod()
print "class method:", MyClass.get_class_name_classmethod()
print "static method:", MyClass.get_class_name_staticmethod()
intance_class.instance_visit_class_attribute()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
执行效果
instance method: MyClassNew
class method: MyClassNew
static method: MyClassNew
实例属性与类属性重名时,优先访问实例属性
self.class_name: instance_class_name
MyClass.name: MyClassNew
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2. 区别
实例方法
属于实例的方法
只能通过实例名.方法名调用。
其可以访问类属性、实例属性,类方法、实例方法、静态方法。类方法
属于类类的方法
可以通过实例名.方法名,也可以类名.方法名
其不能访问实例属性和实例方法静态方法
和类方法很相似,不同的时候定义时要定义(cls)参数
可以通过实例名.方法名,也可以类名.方法名
其不能访问实例属性和实例方法
3. 静态方法与类方法
这两者非常像,都是源于C++或JAVA中static的思想。不过我觉得,python的静态方法是从c++和java进化时的一个不完全产物。尽量使用类方法,不使用静态方法。
python的实例属性、类属性对应c++或java中的非静态属性和静态属性
python的实例方法、类方法对应c++或java中的非静态方法和静态方法
下面是一个类方法比静态方法牛逼的地方
class Color(object):
_color = (0, 0, 0);
@classmethod
def value(cls):
if cls.__name__== 'Red':
cls._color = (255, 0, 0)
elif cls.__name__ == 'Green':
cls._color = (0, 255, 0)
return cls._color
class Red(Color):
pass
class Green(Color):
pass
class UnknownColor(Color):
pass
red = Red()
green = Green()
xcolor = UnknownColor()
print 'red = ', red.value()
print 'green = ', green.value()
print 'xcolor =', xcolor.value()
Python Class 的实例方法/类方法/静态方法的更多相关文章
- python中的实例方法、静态方法、类方法、类变量和实例变量
class MyTest: myname = 'peter' # add a instance attribute def __init__(self, name): self.n ...
- Python的实例方法,类方法,静态方法之间的区别及调用关系
如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...
- Python - 面向对象编程 - 实例方法、静态方法、类方法
实例方法 在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法 实例方法栗子 class PoloBlog: def __init__(self, name, age): print( ...
- python中实例方法,类方法,静态方法简单理解
按照字面名称来理解的话: 实例方法就是实例化对象的方法,绑定在实例对象上 类方法就是类自己的方法,不需要实例化对象,类自己就是对象,直接绑定在类上 静态方法就是普通的函数,函数作为对象,不过是封装在类 ...
- python类的实例方法、静态方法和类方法区别及其应用场景
https://blog.csdn.net/helloxiaozhe/article/details/79940321 普通实例方法,第一个参数需要是self,它表示一个具体的实例本身. 如果用了st ...
- Python面向对象之类属性类方法静态方法
类的结构 实例 使用面向对象开发时,第一步是设计类: 当使用 类名() 创建对象时,会自动执行以下操作: 1.为对象在内存中分配空间--创建对象: 2.为对象的属性 设置初始值--初始化方法(init ...
- 面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)
一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的 ...
- Python绑定方法,未绑定方法,类方法,实例方法,静态方法
>>> class foo(): clssvar=[1,2] def __init__(self): self.instance=[1,2,3] def hehe(self): pr ...
- 关于python的类方法、实例方法和静态方法区别
python的类方法需要在方法前面加装饰器:@classmethod ,静态方法是在方法前面加装饰器:@staticmethod. 类方法.类属性是属于类自身,属于类自身的命名空间,和实例方法.实例属 ...
随机推荐
- JMeter 通过CSV Data Set Config 中文参数化数据,插入数据库后中文显示乱码,解决办法
问题描述: 1. 需要设置中文参数化,模拟post请求,通过配置元件 - CSV Data Set Config 进行设置. 2. 数据库数据显示乱码(实际数据为 “测试001”) 解决办法: CSV ...
- 在jsp中嵌入javascript代码执行对html的影响方式
1 javascript的作用范围 javascript操作的是html dom树. 它可以用来直接写入html标签:修改html的内容:响应事件:修改html中的图像:修改html的样式等等. 2 ...
- [Delphi]解决Delphi Distiller运行报错"HKEY_CURRENT_USER\\" is of wrong kind or size
最近终于决心将使用多年的Delphi 7升级到Delphi 2007,虽然目前Delphi最高版本已经是XE8,但对于只做VCL开发的话还是喜欢2007这个经典的版本. 安装Delphi 2007一切 ...
- php生成条形码: barcodegen
实例结构: 1. index.html <!DOCTYPE html> <html> <head> <title>Test with embedded ...
- iOS 邓白氏编码的申请
http://www.cocoachina.com/ios/20161214/18225.html
- cookie的坑
HTTP Cookie 设置了secure , 该cookie只能在HTTPS通道下被写入浏览器. HTTPS Cookie 设置了secure , 该cookie只能 ...
- 【翻译自mos文章】在重建控制文件之前应该考虑的事情
在重建控制文件之前应该考虑的事情 来源于: Things to Consider Before Recreating the Controlfile (文档 ID 1475632.1) 适用于: Or ...
- maven编译问题-maven项目运行时找不到文件,解决方案之一
问题描述:以上信息是tomcat在启动项目的时候报的错误信息,发现没有找到配置文件,实际上配置文件在项目中是存在的,但是,在编译过程中,配置文件没有能加载到编译后的项目中.就造成了,找不到这些怕配置文 ...
- PHP安全编程之php.ini配置
1.register_globals=On <?php//ex1.php if(check_admin()) { $is_admin=true; } if($is_admin) { ...
- nginx-gridfs的安装
mongodb中gridfs适合存放视频和高清图片等等超大文件(小的文件建议不要存在mongodb中): 下面是在centos下配置nginx来訪问mongodb中的mp4文件: 1:安装nginx- ...