zoukankan      html  css  js  c++  java
  • 面向对象--类,嵌套

    一:类的成员:

    例:

    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
  • 相关阅读:
    ios 常用的数学函数
    iOS已发布应用中对异常信息捕获和处理
    iOS 制作framework步骤
    iOS 静态库和动态库.a和framework
    C#实现发送和接收pop3邮件方法
    C#实现给手机发送短信
    C#DataTable DataSet DataRow区别详解
    gridview合并相同的行
    ASP.NET导出EXCEl方法使用EXCEl对象
    ASP.NET导出EXCEl方法使用COM.EXCEL不使用EXCEl对象
  • 原文地址:https://www.cnblogs.com/wangjun187197/p/9549919.html
Copyright © 2011-2022 走看看