python - 面向对象编程基础知识 (进阶)

一、在类中的普通字段静态字段

class foo():
    c_name = 'cc'
    def __init__(self,content):
        self.content = content
    def show(self):
        print (self.content)
print (foo.c_name)
obj = foo('test content')
obj.show()
print (obj.c_name)
# test content
# cc
# cc

  在这段代码中c_name就是类中的静态字段,而在实例化foo时,传递的'test content'就是普通字段。普通字段保存在对象,并且普通字段只能通过对象访问,普通字段是可以被修改的。静态字段保存类,可以通过类或对象来访问。

  静态字段是在类实例化之前就已经在内存中了,他是python解释器自上而下执行的时候就已经运行了c_name = 'cc'。

 

二、在类中有三种方法

  1. 普通方法

    只能通过对象来调用。

    如果对象中需要保存一些值,同时在对象调用方法的时候需要用对象中的这些值,这时就用普通方法。

   2. 静态方法

    可以通过类或对象调用。

    静态方法就类似一个函数,不用通过创建对象直接调用。

    不需要任何对象的值,就要运行代码。则可以用静态方法。

  3. 类方法

    保存在类中,由类直接调用。cls是python自动传的。

    类方法和静态方法比较类似,但类方法可以使用类中的值。

class foo():
    def __init__(self,content):
        self.content = content
        print ('__init__ method')
    def show(self):
        print (self.content)
    @staticmethod
    def sm(str1,str2):
        print (str1,str2)

obj = foo('test content')
obj.show()
foo.sm('string1','string2')
obj.sm('string3','sting4')

 

 三、类中成员的属性

  定义类中的属性方法。

class foo():
    @property
    def pers(self):
        return 'pers'
    @pers.setter
    def pers(self,val):
        print (val)
    @pers.deleter
    def pers(self):
        print ('del pers')
obj = foo()
print (obj.pers)
obj.pers = 'test_string'
del obj.pers
# pers
# test_string
# del pers

   属性的另外一种写法

class bar():
    def b1(self):
        return 123
    def b2(self,val):
        print ('set is {}'.format(val))
    def b3(self):
        print ('del is True.')
    per = property(fget=b1,fset=b2,fdel=b3)
obj_bar = bar()
print (obj_bar.per)
obj_bar.per = 'test_string'
del obj_bar.per
# 123
# set is test_string
# del is True

 

 

 

posted @ 2018-04-01 00:00  西康的博客  阅读(112)  评论(0编辑  收藏  举报