python是面向对象开发方法_python面向对象开发 类的方法(精讲)

python

代码规范!!!!

写出来的时候,

方法的地一个字母小写,从第二个字母开始,全部大写

类开头地一个字母大写!!!

classExcellentPeople():defcleverChinese():defrichGuys():def beautifulGirls():

按照这种方式!!!

千万不要写完代码后修改!!记住,第二个字母必须大写!!

类更大一点,第一个就需要大写!

-------------方法,第一个字母还是小写,后来的字母全部是大写!

视频上为什么到讲完了才说,然后自己改。怎么当程序员的,教学顺序有问题。

他们有

1 公有方法 public method

类中

2 私有方法 private method

只在类中被本类私有的,不能直接被外部被访问,或者只能通过类中其他方法访问,或者建立一个新的对象使用,object._Class__privatemethod()        # 这种方式一般在测试中使用,生产环境下不推荐

3 类方法 class method

使类中的方法,可以直接调出来供外部使用,节省内存,但是会花搜索类方法的时间,需要加self

4 静态方法 static method

将类中该方法所有的内容都加载到内存中,搜索快捷,但是不节约内存。不需要加self

公有方法:

私有方法:

1 #!/usr/bin/python

2 #coding:utf8

3

4 classMilo():5 name = "csvt"

6 __private = "这是一个私有属性"

7 deffun1(self):8 printself.name9 print "我是公有方法"

10

11 def __fun2(self):12 printself.name13 print "我是私有方法"

14

15 @classmethod16 defclassfun(self):17 printself.name18 print "我是类方法"

19

20 @staticmethod21 defstaticfun(): # 静态方法 不用 self! 因为已经全部加载了22 printMilo.name #用类名选取类属性的表达方式!!! 不是self!23 print "我是静态方法"

24 zou =Milo()25 zou._Milo__fun2() #通过这种方式调用私有方法,仅供测试用

26 #一般情况下私有方法都是要在类中被别的方法利用的

27 print zou._Milo__private #私有属性也是这样调用的,尽在测试中用

输出结果为:

alex@universe ~/python/OOP $ python cls_LeiDeFangFa_in_details.py

csvt

我是私有方法

这是一个私有属性

调用私有方法的时候,还可以这样用:

1 #!/usr/bin/python

2 #coding:utf8

3

4 classMilo():5 name = "csvt"

6 __private = "这是一个私有属性"

7 deffun1(self):8 printself.name9 print "我是公有方法"

10 self.__fun2()11

12 def __fun2(self):13 printself.name14 print "我是私有方法"

15

16 @classmethod17 defclassfun(self):18 printself.name19 print "我是类方法"

20

21 @staticmethod22 defstaticfun(): # 静态方法不用加 self23 printMilo.name#用类名选取类属性的表达方式!!! 不是self!24 print "我是静态方法"

25 zou =Milo()26 zou.fun1() #通过这种方式调用私有方法

27 #一般情况下私有方法都是要在类中被别的方法利用的

输出结果为:

alex@universe ~/python/OOP $ python cls_LeiDeFangFa_in_details.py

csvt

我是公有方法

csvt

我是私有方法

-----提示:

公有属性可以直接这样访问

print Milo.name

输出是

csvt

但是公有方法不能这样访问,必须实例化(创造一个实例)

Milo.fun1()

报错如下:

alex@universe ~/python/OOP $ python cls_LeiDeFangFa_in_details.py

Traceback (most recent calllast):

File"cls_LeiDeFangFa_in_details.py", line 26, in Milo.fun1()

TypeError: unbound method fun1() must be called with Milo instance as first argument (got nothing instead)

类方法:

比较简单的是使用装饰器,即 @classmethod

1 #!/usr/bin/python

2 #coding:utf8

3

4 classMilo():5 name = "csvt"

6 deffun1(self):7 printself.name8 print "我是公有方法"

9 self.__fun2()10

11 def __fun2(self):12 printself.name13 print "我是私有方法"

14

15 @classmethod16 defclassfun(self):17 printself.name18 print "我是类方法"

19

20 @staticmethod21 defstaticfun():# 静态方法 不用 self! 因为已经全部加载了22 printMilo.name #用类名选取类属性的表达方式!!! 不是self!23 print "我是静态方法"

24

25 Milo.classfun()

输出的是

alex@universe ~/python/OOP $ python cls_LeiDeFangFa_in_details.py

csvt

我是类方法

如果不加类方法的话(即去掉@classmethod,或者不使用newClassFun = classmethod(classfun) 的这种新建一个类属性的方法),则不能直接用

报错:

alex@universe ~/python/OOP $ python cls_LeiDeFangFa_in_details.py

Traceback (most recent calllast):

File"cls_LeiDeFangFa_in_details.py", line 25, in Milo.classfun()

TypeError: unbound method classfun() must be called with Milo instance as first argument (got nothing instead)

静态方法:

用@staticmethod

用 staticnewfun = staticmethod(staticfun)   # 新建一个静态方法,看起来比较麻烦

都可以达到将方法变成静态方法 的 目的。

1 #!/usr/bin/python

2 #coding:utf8

3

4 classMilo():5 name = "csvt"

6 deffun1(self):7 printself.name8 print "我是公有方法"

9 self.__fun2()10

11 def __fun2(self):12 printself.name13 print "我是私有方法"

14

15 @classmethod16 defclassfun(self):17 printself.name18 print "我是类方法"

19

20 @staticmethod21 defstaticfun():22 printMilo.name23 print "我是静态方法"

24

25 Milo.staticfun()

注意上面的

20 @staticmethod21 defstaticfun():22 printMilo.name23 print "我是静态方法"

statcitfun()没有self,表示全部加载了。

Milo.name 直接用的类名找属性了

输出结果是:

alex@universe ~/python/OOP $ python cls_LeiDeFangFa_in_details.py

csvt

我是静态方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值