Python初学之类的方法
来源:互联网 发布:淘宝的试用报告怎么写 编辑:程序博客网 时间:2024/05/22 05:25
实例对象的公有方法和私有方法:公有方法通过对象名直接调用,私有方法不可以,只能在属于对象的方法中通过self调用,或者在外部通过Python支持的特殊方法调用。如果通过类名来调用时属于对象的公有方法,需要显示地为该方法的self参数传递一个对象名,用来明确指定访问那个对象的数据成员。静态方法和类方法都可以通过对象名和类名调用,但不能直接访问属于对象的数据成员,只能访问属于类的成员。一般用cls作为类方法 的第一个参数名称,但是也可以使用其他的名字作为参数,并且调用类方法时不需要为改参数传递值。
在构造函数中,程序对公有变量设置了初始值(初始化),可以在构造函数中使用参数,通常使用参数来设置成员变量(特别是私有变量)的值。
术语解释:实例变量 = 实例属性=实例对象的属性 = 成员变量 ;类变量 = 类属性
(1)静态方法
静态方法无须传入self参数,因此静态方法无法访问实例变量;静态方法中不可以直接访问类的静态变量,但可以通过类名引用静态变量。
所以静态方法与定义它的类没有直接关系,类似函数工具库。可以通过类和实例对象访问静态方法,二者无区别。
(2)类方法
类方法有一个cls参数,代表定义类方法的类,可以通过cls访问类的静态变量。
class myclass:
vall = 'string'
def __init__(self):
self.a1 = 'a'
@classmethod
def classmd(cls):
print str(cls),cls.vall#无法访问a1的值
myclass.classmd()
c = mylass()
c.classmd()
class Root:
__root = 0
def __init__(self,a):
self.__a = a
Root.__root +=1
def show(self):
print self.__a,self.__root
@classmethod
def classmd(cls):
print cls.__root#类方法
@staticmethod
def staticmd():
print Root.__root#静态方法
结果如下:
>>> r = Root(1)#创建实例对象r
>>> r.classmd()#通过对象名调用类方法
1
>>> r.staticmd()#通过对象名调用静态方法
1
>>> r.show()#通过对象名调用实例对象方法
1 1
>>> Root.classmd()#通过类名调用类方法
1
>>> Root.staticmd()#通过类名调用静态方法
1
>>> Root.show()#试图调用实例对象方法,失败。
Traceback (most recent call last):
File "<pyshell#160>", line 1, in <module>
Root.show()
TypeError: unbound method show() must be called with Root instance as first argument (got nothing instead)
>>> Root.show(r)#通过类名调用势力对象方法时为self显示传对象名。
1 1
>>> r.show()
1 1
>>> rr = Root()
Traceback (most recent call last):
File "<pyshell#163>", line 1, in <module>
rr = Root()
TypeError: __init__() takes exactly 2 arguments (1 given)
>>> rr = Root(4)
>>> r.show()
1 2
>>> rrr = Root(5)
>>> r.show()
1 3
>>> Root.show(rr)
4 3
>>> Root.show(rrr)
5 3
- Python初学之类的方法
- python之类方法的重载
- Python初学之类的狭义属性(@property)
- Python初学之类的继承和多态
- Python之类(Class)的学习
- Python浅析之类的写法
- python之类
- Python之类
- Python之类
- 初学Python,Mac下打开.bash_profile的方法
- 【Python初学笔记】输出中文的方法(字符编码)
- python初学的笔记
- Python之类的继承和多态
- Python之类的构造和继承
- Python之类的重写和私有变量
- Python基础篇之类的继承
- JAVA反射之类的加载方法
- 20150619_OC之类方法的内存管理
- ZZULIOJ【1053】正弦函数【数学】
- 零、春风十里不如Linux(零)
- G
- Spring @Qualifier注解
- [AirFlow]AirFlow使用指南一 安装与启动
- Python初学之类的方法
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- 【java设计模式】之 策略(strategy)模式
- 在程序中鼠标的监听器对用户的行为做出反应
- 苹果大力扩张Apple Pay 即将在韩国等地推出
- mybatis配置文件实现数据库带下横线字段与实体类属性一致的映射
- 【java设计模式】之 责任链(chain of resposibility)模式
- Java多线程(二)
- java enum(枚举)使用详解 + 总结