zoukankan      html  css  js  c++  java
  • 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()

    准则: 字段和方法的归类

    可以继续总结    

  • 相关阅读:
    vs已停止工作
    2.3.4 工具运行和错误解决方法
    vs2010 :0X80041FEB 程序集无法修改版等内容
    VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
    栅格计算器中空间分析函数
    设备系统,个人消费系统
    知己知彼
    ASP.NET MVC 实现二级域名
    自定义ASP.NET MVC Html辅助方法
    MVC系统过滤器(局部缓存,局部动态)
  • 原文地址:https://www.cnblogs.com/SUIFAN/p/9549677.html
Copyright © 2011-2022 走看看