zoukankan      html  css  js  c++  java
  • 面向对象2

    一 面向对象的成员

    1 面向对象的成员有三类:变量(字段),方法,属性

     变量:实例变量(字段):公有实例变量,私有实例变量

                  类变量(静态字段):公有类变量,私有类变量

     1 class Foo:
     2       country='中国'           类变量(静态字段) 直接通过类访问Foo.country
     3       def __init__(self,name):      
     4              self.name=name      实例变量(字段)
     5        def func(self):
     6 
     7 obj1=Foo('汪峰')
     8 obj2=Foo('章子怡')
     9 
    10 Foo.country
    11 
    12 
    13 类变量可以通过对象调用 也可以用类调用
    14 
    15 
    16 准则:实例变量(字段)访问时,使用对象访问:obj1.name
    17          类变量(静态字段)访问时,用类方法,即:Foo.country(实在不方便时,才使用对象访问)
    18 
    19 print(obj1.name)
    20 print(Foo.country)
    变量

    2 什么时候用类变量?
    当所有对象中有共同字段时且要改都改要删都删,可以将实例变量(字段)提取到类变量(静态字段)

    3 公有与私有

    公有的可以内部调用 也可以外部调用

    私有的只要在前面加上__就变成私有的

     1 私有的实例变量(私有字段)
     2 class Foo:
     3        def __init__(self,name):
     4            #self.name=name    公有的
     5              self.__name=name   私有实例变量(私有字段)
     6              self.age=12
     7         def func(self):
     8                print(self.__name)   内部可以访问私有的
     9 
    10 obj=Foo('哈哈')
    11 print(obj.age)
    12 obj.__name  #无法访问
    13 obj.func()    找一个内部人员:func,让func帮助你执行内部私有__name   
    14 
    15 
    16 
    17 类变量(静态字段)
    18 class Foo:
    19         country='中国'    #把country='中国'  改为__country='中国'   变成私有的
    20         def func(self):
    21            #内部调用
    22               print(self.coutry)   >>  self.__country
    23               print(Foo.country)   #推荐使用类方法访问类变量    >>  Foo.__country
    24  #外部调用
    25 print(Foo.country)     #改为私有后外部不能调用
    26 
    27 obj=Foo()
    28 obj.func()
    公有与私有


    方法:(1)实例方法   (2)静态方法 (3)类方法

    方法中也有公有和私有之分(成员修饰符)

     1 1 实例化方法
     2 class Foo(object):
     3         def __init__(self,name):
     4                 self.name=name
     5          def func(self):   >>实例方法   self是对象
     6                  print(self.name)
     7 obj=Foo()
     8 obj.func()
     9                  
    10 
    11 
    12 
    13 2 静态方法
    14 class Foo(object):
    15         def __init__(self,name):
    16                 self.name=name   实例化对象
    17 
    18          >>实例方法(至少有一个参数如self)
    19          def func(self):   
    20                  print(self.name)
    21 
    22          @staticmethod     >>静态方法(可以通过类调用和对象调用 推荐使用类调用) 可传参
    23          def display():
    24                  print('666')
    25 
    26 
    27 obj.display()
    28 Foo.display()
    29 
    30 
    31 
    32 静态方法:如果方法中无需使用对象中封装的值,则使用静态方法
    33                  
    34 总结:1 编写时:方法上方写@staticmethod  方法的参数可有可无
    35          2 调用时,直接使用类.方法名() (推荐使用)   也可以使用对象调用  对象》方法名()
    36          3 什么时候写静态方法
    37              如果方法中无需使用对象中封装的值,则使用静态方法
    38 
    39 
    40 
    41 3 类方法
    42 class Foo(object):
    43 
    44           @classmethod         类方法    至少有一个参数cls 也可以加参数
    45          def show(cls,x1,x2)
    46                   print(cls,'111')   cls 传递的是当前类   cls是类    
    47 
    48  Foo.show(1,8)    
    49 
    50 结果 :class '__main__'.Foo> 1  8
    51 
    52 
    53 
    54 总结:1 类方法定义时:方法上方写:@classmethod  
    55                                 方法的参数:至少有一个cls参数
    56          2 执行时:
    57                     类名.方法名()  默认会将当前类传递到参数中
    58          3 什么时候用?
    59                       如果在方法中会使用到当前类就可以使用类方法       
    60 
    61 
    62          
    方法

    属性 :通过方法改造出来的

     1 class Foo(object):
     2         def __init__(self):
     3               pass
     4        @property    >>属性
     5         def start(self):      只能有一个self  后面不能在加参数
     6               return 1
     7        @property
     8         def end(self):
     9                return 10
    10 obj=Foo()
    11 obj.start    不需要加括号  
    12 obj.end
    13 
    14 
    15 结果: 1
    16           10
    17 
    18 
    19 编写时:方法上方写@property
    20 调用时无需加括号   直接写对象.方法
    21 应用场景:对于简单的方法,当无需传参时且有返回值
    属性
  • 相关阅读:
    CLR Via CSharp读书笔记(26)
    RH253读书笔记(10)-Appendix A Installing Software
    RH253读书笔记(9)-Lab 9 Account Management Methods
    一位程序员工作10年总结的13个忠告
    不跟你谈“五险一金”的老板,都是在耍流氓
    RH253读书笔记(8)-Lab 8 Securing Data
    RH253读书笔记(7)-Lab 7 Electronic Mail
    RH253读书笔记(6)-Lab 6 Implementing Web(HTTP) Services
    robotium测试创建java文件和junit文件区别
    LigerUi中为Grid表加上序号,并调整适当宽度!(实例)
  • 原文地址:https://www.cnblogs.com/mlhz/p/9549941.html
Copyright © 2011-2022 走看看