• python 面向对象 类 成员 嵌套 (2)


    1. 成员

    1.类的成员

    class Foo:
                
        # 方法
        def __init__(self,name):
        # 实例变量/字段
        self.name = name     
                    
        # 方法
        def func(self):
            pass 
        
        # obj,Foo类的对象
        # obj,Foo类的实例
        obj = Foo('周润发')

    成员共分为三类: 

    变量:

    实例变量(字段)

      -公有实例变量(字段)

      -私有实例变量(字段 )

    类变量(静态字段)

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

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

    实例一:

    class Foo:
        # 类变量(静态字段)
        country = "中国"
                                
        def __init__(self,name):
        # 实例变量(字段)
        self.name = name  
                                
                                
        def func(self):
            pass
                    
                    
    obj1 = Foo('杨过')
    obj2 = Foo('小龙女')
                            
    Foo.country

    思考题:如何验证儿子都不知道私有字段的存在

    无法访问:

    class Base(object):
            __secret = "受贿"
    
    class Foo(Base):
    
            def func(self):
                print(self.__secret)
                print(Foo.__secret)
    
    
    obj = Foo()
    obj.func()

    可以访问:

    class Base(object):
                __secret = "受贿"
    
            def zt(self):
                    print(Base.__secret)
    
    
    class Foo(Base):
    
            def func(self):
                    print(self.__secret)
                    print(Foo.__secret)
    
    
    obj = Foo()
    obj.zt()
                        

    方法: 

      -实例方法

    # class Foo(object):
    #     def __init__(self,name):
    #         self.name = name
        #实例方法 # def func(self): # print(self.name) # obj = Foo('方法') # obj.func()

    -静态方法

    class Foo(object):
        def __init__(self,name):
    
                    self.name = name
       #静态方法, 如果方法无需使用对象中封装的值,那么就可以使用静态方法 @staticmethod
    def display(a1,a2): return a1 + a2 Foo.display(1,3)

    类方法

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

    面试题: 静态方法/ 类方法和实例方法的区别?

    属性(通过方法改造出来):
        示例:

    ss Foo(object):
        def __init__(self):
            pass
            @property
            def start(self):
                return 1
            @property
            def end (self):
                return 10
    
    obj = Foo()
    print(obj.start)
    print(obj.end)

    总结:

    1. 编写时
                      - 方法上方写 @property
                      - 方法参数:只有一个self
     2. 调用时:无需加括号  对象.方法

     3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property

    2.嵌套(建模)

    面向对象:

    创建三个学校且三个学校的设施内容等都是一致.

    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('徐帆',18,10000000)
    t2 = Teacher('彦涛',28,100000)
    t3 = Teacher('女神',17,10000)
    # 老师分配校区 t1.school
    = obj1 t2.school = obj1 t3.school = obj3
    #查看t2老师,所在的校区名称/地址
    print(t2.school.name) print(t2.school.address) print(t2.name) print(t2.age) t1.school.speech()

    准则: 字段和方法的归类

    可以继续总结    

  • 相关阅读:
    我倾向于使用发布版本进行调试,而不是使用调试版本
    常见WinDbg问题及解决方案
    在崩溃转储中查找所有可能的上下文记录
    向C/C++程序员介绍Windbg 脚本
    VS 使用技巧(1)
    Windows资源监视器软件的原理
    微架构、指令集架构与汇编语言的关系
    调试寄存器 原理与使用:DR0-DR7
    如何学习调试?
    WinDbg: 执行 SOS 扩展命令 !clrstack时报错 Access violation exception (0xC0000005)
  • 原文地址:https://www.cnblogs.com/SUIFAN/p/9549677.html
Copyright © 2020-2023  润新知