类的成员

一.成员

1.类的成员  (函数,变量)

   class Foo 
          #方法

   def __init__(self,name)

    self.name = name    #实例变量\字段

   #方法

            def func(self ):
      pass 
#obj,Foo 类的对像

#obj.Foo类的实例

 

类的成员分三类(在源码里边有,目前用不到)

     变量:

                        实例变量 (字段)

         共有的实列变量(字段)

         私有的实例变量(字段)

             类变量 (静态字段)  

         共有的实列变量(静态字段)
                      私有的实例变量(静态字段)

 class Foo 
          name = "中国"  #类变量

   def __init__(self,name)

    self.name = name    #实例变量\字段

            def func1(self ):

      pass 

   def func2(self):

    pass 

一般准则:以后对于实例变量(字段),使用对象访问即:obj.name

    类变量(静态字段)访问时,使用类方法.即:Foo.name(实在不行在用对象访问)

什么时候用类变量呢??

当所有对象中有公共字段时且

 

方法:

    1.实例方法

    2.静态方法

    3.类方法

------------------------没必要写实例方法---------------------------------

class Foo (object)

   def __inint__(self ,name)

    self.name = name

   def func(self):
    print("132")
obj.Foo()
obj.func()

------------------------有必要写实例方法---------------------------------

class Foo (object)

   def __inint__(self ,name)

    self.name = name

   def func(self):   #实例方法
    print(self.name)

   @staticmethod    #静态方法    (相当于把他当成函数去用了,反正你也不用,但是在这个类中)

   def sidplay(self):

    print("666")
obj.Foo()
obj.func()

Foo.display()

如果在方法无需使用对象中封装的值,那么就可以使用静态方法

总结:

  1.编写时:  方法上方写@staticmethod

          方法参数可有可无

  2.调用时:  类.方法

        对象.方法名

什么时候用呢??

    无需调用对象中以封装的值时用静态方法

    

3.类方法 (类似于静态方但在编写时稍有不同,有参数)

class Foo (object)

   def __inint__(self ,name)

    self.name = name

   @classmethod    #类方法

   def show (cls,x1,x2):

    print(cls,x1,x2)

#调用

Foo.show(1,8)

什么时候用呢??

调用类中的值的时候,就用这个方法,他会自动的帮你传递

总结:

  1.定义时:  方法上面写:@classmethod

        方法参数:至少有一个cls参数,你不写pycharm会帮你写上

  2.执行时:  类名.方法名()

      

强加一个面试题:

静态方法和类方法还有实例方法的区别?

  答:从三个方面去说,定义,执行时,应用场景

 

 

class Foo(object)
  def __init__(self):

   pass 

  def __display(self,arg):

    print("私有方法",arg)

  def func (self):

  self,__display(132)

 

 

属性  (通过方法改造过来的)

class Foo(object)
  def __init__(self):

   pass 

  @proeperty    #变成属性

  def start(self):

    return 1

  @property    #变成属性

  def end (self):

    return 10

obj = Foo()

print(obj.start)

print(obj.end) 

 

总结:

  1.编写时: 方法上面写上@property

       方法参数:只有一个self

  2.调用时:无需加括号,对象 方法

  3.应用场景:对于简单的方,当无需传参且有返回值的时候

练习题:

data_list = []

for i in range(1,901)

  data_list.append("alex-%s"%i)
#要查看的页面

page = int(input("请输入你要查看的页码:"))
#每页显示10条
per_page_num = 10

page_data_list =data_list[0:10] 

for item in 

 ................

 

posted @ 2018-08-28 12:35  RootEvils  阅读(271)  评论(0编辑  收藏  举报