欢迎来到氵一壶灬清酒い的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

面向对象--类,嵌套

一:类的成员:

例:

class Foo:          #创建类
    #方法
    def __init__(self,name):
            #实例变量/字段
            self.name = name
    #方法
    def func(self):
            pass

#obj.Foo类的对象
#obj.Foo类的实例

obj = Foo('四大龙王')

成员分为三类:  字段 - 方法 - 属性

  字段(变量):

    - 实例变量(字段)

      -公有实例变量(字段)

class Foo:

    def __init__(self,name):
           self.name = name
            self.age = 123

    def func(self):
          print(self.name)


obj = Foo('李哥')
print(obj.name)
print(obj.age)
obj.func()
View Code

 

      -私有实例变量(字段)

class Foo:
    def __init__(self,name):
        #私有实例变量(私有字段)
        self.__name = name   #私有

        self.age = 123

    def func(self):
        print(self.__name)

obj = Foo('小狗')
print(obj.age)
#obj.__name  #无法访问
obj.func()        #找到一个内部:func, 让func帮助执行内部私有__name
View Code

 

    -类变量(静态字段)

      -公有类变量(静态字段)

class Foo:
    country = "中国"

    def __init__(self):
        pass

    def func(self):
        #内部调用
        print(self.country)
        print(Foo.country)   #推荐
#外部调用

print(Foo.country)

obj = Foo()
obj.func()
View Code

 

      -私有类变量(静态字段)

class Foo:
    __country = "中国"

    def __init__(self):
        pass

    def func(self):
        #内部调用
        print(self.__country)
        print(Foo.country)           #推荐

#外部无法调用私有类变量
#print(Foo.country)

obj = fooc()
obj.func()
View Code

 

字段:

class Foo:
    #类变量(静态字段)
    country = "中国"
    
    def __init__(self,name):
           #实例变量(字段)
            self.name = name

    def func(self):
            pass


"""
准则:
    实例变量(字段)访问时,使用对象访问,即:obj.name
    类变量(静态字段)访问时,使用类方法,即Foo.country (实在不方便的时候才用对象访问)

"""

什么时候使用变量?

  当所有对象中有共同的字段时要改都改,要删都删时,可以将实例变量(字段)提取到类变量(静态字段)

方法:

方法分为:

  -实例方法:由对象调用,至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self.

class Foo(object):
    def __init__(self,name):
        self.name = name

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

obj = Foo('..')
obj.func()
View Code

  -静态方法:由类调用,无默认参数.

class Foo(object):
    def __init__(self,name):
        self.name = name

    #静态方法,如果无需使用对象中封装的值,那么久可以使用静态方法
    @staticmethod
    def display(a1,a2):
        return a1+a2
Foo.display(1,3)
View Code

  -类方法:由类调用,至少一个cls参数,执行类方法时,自动将调用该方法的类赋值给cls.

class Foo(object):
    #类方法,cls是类
    @classmethod
    def show(cls,x1,x2):
        print(cls,x1,x2)
#执行类方法
Foo.show(1,8)
View Code

方法包含:实例方法,静态方法,类方法,三种方法在内存中都归属于类,区别在于调用方式不同.

属性

1:属性的基本使用

# ##############定义###############
class Foo:
    def func(self):
        pass


    #定义属性
    @property
    def prop(self):
        pass

# ###############调用###############
foo_obj = Foo()

foo_obj.func()
foo_obj.prop                #调用属性
View Code

Python的属性的功能是:属性内部进行一系列的逻辑计算,最终将计算结果返回。

注意:

  在定义时,在方法上添加@property;

  属性仅有一个self参数

  无需使用括号

  方法: foo_obj.func()

  属性:foo_obj.prop

  属性存在的意义是:访问属性时可以制造出和访问字段完全相同的假象

  属性通过方法改造出来,如果Python中没有属性,方法完全可以替代其功能

2.属性的两种定义方式

属性的定义有两种方式:

  装饰器 即:在方法上应用装饰器

  静态字段 即:在类中定义值为property对象的静态字段

二:嵌套

"""
创建三个学校且三个学校的设施内容等都是一致.
"""
class School(object):
    def __init__(self, name, address):
        self.name = name
        self.address = address

    def speech(self):
        print('讲课')


obj1 = School('老男孩北京校区', '美丽富饶的沙河')
obj2 = School('老男孩上海校区', '浦东新区')
obj3 = School('老男孩深圳校区', '南山区')


class Teacher(object):
    def __init__(self, name, age, salary):
        self.name = name
        self.age = age
        self.__salary = salary
        self.school = None


t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神', 16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech()

# 准则: 字段和方法的归类.
View Code

 

posted on 2018-08-28 17:57  成伤大大  阅读(151)  评论(0编辑  收藏  举报

导航