• python面向对象的特点,类定义等,私有属性、公有属性、成员属性


    引子:类的对象在内存中的表示
    def dog(name,dog_type):
    def bark(d):
    print(d,'wang wang wang ...')
    data = {
    'name':name,
    'type':dog_type
    'bark':bark
    }
    调用方法:
    d1 = dog('小哈','哈士奇')
    d1['bark'](d1)

    可以阻止不同类型角色的方法混用
    但是同类角色也有不同的地方,这时候快速开发等等需要引入面向对象的概念
    对象间复杂的关系描述,有相同点也有不同点。需要面向对象的思想

    1.类 略
    2.对象 略
    3.封装
    作用防止内部对象数据不能被外部随意修改
    使外部程序不需要关注对象内部的构造,只需要通过对象对外提供的接口进行访问
    4.继承
    5.多态
    “一个接口,多种实现”

    ------------------------

    class Dog(object):
        country = 'JP'  #全局变量,通过类修改后,所有对象全改,通过对象修改只是单个对象改了
        def __init__(self,name):
            self.NAME = name #成员属性
        def sayhi(self):
            print('hello, I am a dog',self.NAME)                

    self表示对象本身,NAME为类的成员属性

    d = Dog("a") # Dog(d,"a")
    d2 = Dog("b")

    类-->实例化--->实例对象
    __init__ #构造函数
    self.name = name #成员属性
    def sayhi() #方法
    * 私有属性外部不能直接访问,两个下划线定义,属于该对象内部私有。
    self.__heart = "Normal"
    如果想让私有属性只能被读 不能被改可以
    def get__heart(self):
    return self.__heart
    强制访问私有属性:r1._Role__heart r1对象名,Role类名,__heart私有属性
    * 公有属性:所有属于该类的对象都可以访问的属性,属于该类。(常量)country
    实例化之前就已经存在,可以通过 类名.共有属性去访问
    通过类名去改country,那么以后所有通过对象去访问的country都改了
    通过某实例去改,实际是在r1内存中加了一个country
    r1.country=CN 只有r1对象改了,其他没有变还是JP

    * 成员属性,self.NAME等属性,属于对象本身。

    注意:country,sayhi在内存中只有一份,对象调用的时候都是把对象的引用传给类中的方法调用。

    可以看出方法也是公有的。例如sayhi只有一份。
    如果要改成私有方法(每个对象单独的一份)需要:
    def private(self):
    print("private")
    r1.sayhi = private
    r1.sayhi(r1)

  • 相关阅读:
    原创 记录一次线上Mysql慢查询问题排查过程
    原创 |我是如何解决POI解析Excel出现的OOM问题的?
    FastJson序列化时候出现了$ref?还不赶紧学习下
    fastjson自定义序列化竟然有这么多姿势?
    SpringBoot2.0整合WebSocket,实现后端数据实时推送!
    SpringMVC+Mybatis 如何配置多个数据源并切换?
    异常: java.security.InvalidKeyException: Illegal key size
    一分钟带你了解下MyBatis的动态SQL!
    一分钟带你了解下Spring Security!
    历时七天,史上最强MySQL优化总结,从此优化So Easy!
  • 原文地址:https://www.cnblogs.com/revo/p/7362252.html
Copyright © 2020-2023  润新知