zoukankan      html  css  js  c++  java
  • python类总结

    python类总结

    python 类的总结

    1. 私有属性

      class Dog():
      def init(self):
      self.heart=100
      d=Dog()
      d.heart #访问不到,heart属于私有
      在变量前加
      两个下划线,变量变为私有属性,外部不能访问,内部可以访问
      def getheart(): return self.heart#提供对外的私有属性的访问方法
      对私有属性的强制访问
      d.Dog
      heart

    2. 公有属性(所有类共同拥有的属性) class Dog() type='京巴' #创建公有属性 d=Dog() d2=Dog() Dog.type #这样调用,是在所有类的对象的公有变量里设置 d.type#d,d2属性相同 d2.type#当用对象调用的时候,会在自己对象的内存里新建一个type变量
    3. 析构函数
      d=Dog() del d#删除对象名到内存空间的引用
    4. 继承
    5. 静态方法
      名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性
      author = 'Mr.Bool'
      class Dog(object):
      def init(self,name):
      self.name=name
      @staticmethod
      def eat():
      print("%s like eat 骨头"%self.name)
      print('狗爱吃骨头')
      @staticmethod
      def eat(self):
      print("%s like eat 骨头"%self.name)
      # print('狗爱吃骨头')
      def talk(self):
      self.eat(self)
      print('汪汪')

      d=Dog("汪汪")
      d.talk()

    6. 类方法 @classmethod 类方法只能访问类变量。不能访问实例变量。几乎很少用
    7. 属性方法 @property
      把一个方法变成一个静态属性,不用括号调用。 class Dog(): def init(self): pass @property def eat(self): print('狗爱吃骨头') @property def eat(self,name): print('狗爱吃%s'%self.name) @eat.setter def eat(self,foot): print('set to foot:%s'%foot) d=Dog() d.eat 调用属性方法 d.eat='包子' 当属性方法需要传参数,就要重写一个方法,方法名与属性方法名相同 d.Eat='包子' 大写也可以 当删除属性方法时用 @eat.delete def eat(self): del self.__food print('删完了')
    8. 类的描述信息
      class Dog(): '''这个类是描述狗的''' print(Dog.doc)输出 这个类是描述狗的
    9. moduleclass module输出 这个类是从哪个模块里 class输出类
    10. call 对象后面加括号执行call d=Dog() d() 将调用Dog里的call方法
    11. dict查看对象中的所有成员变量和方法,使用实例调用只打印实例内的属性,不包括类属性
    12. str

      在类里写
      def str(self): return "<obj:%s>"%self.name d直接打印对象就输出str里的内容

    13. getitem,setitem,delitem,把类变成字典
      class Foo(object): def init(self): self.data={} pass def getitem(self,key): print('getitem',key) return self.data.get(key) pass def setitem(self,key,value): print('setitem',key) self.data[key]=value pass def delitem(self,key): print('delitem',key) pass obj=Foo() obj['name']='alex'#自动触发执行 getitem print(obj['name'] #自动触发执行 setitem del obj['k1'] #自动触发执行delitem
    14. new metaclass 类也是对象,type为类的类
      class Dog(): pass type(Dog) 会知道类的类为type new方法在init构造函数方法前执行 new里面调用init
      def new(cls,args,*kwargs): print('Foo --new--') return object.new(cls) 当return被注释时,init不会被调用,这句继承父类的new方法 metaclass原类

      class MyType(): def init(self): print("mytype init") 1 pass def call(self): print("mytype call") 2 class Dog(): metaclass=MyType def init(self): print("dog init") 4 pass def new(self): print("dog new") 3
      call创建new new创建init

    15. 反射
      getattr setattr hasattr delattr class Foo(object):

      def __init__(self):
      self.name = 'wj'
      def func(self):
      return 'func'

      obj = Foo()

      检查是否含有成员 #### hasattr(obj, 'name') hasattr(obj, 'func')

      获取成员 #### getattr(obj, 'name') getattr(obj, 'func')

      设置成员 #### setattr(obj, 'age', 18) setattr(obj, 'show', lambda num: num + 1)

      删除成员 #### delattr(obj, 'name') delattr(obj, 'func')

  • 相关阅读:
    mybatis报错invalid types () or values ()解决方法
    windows下新安装的mysql修改root password问题
    2分钟在eclipse下使用SpringBoot搭建Spring MVC的WEB项目
    Windows 10 下mysql 安装后无法启动问题
    【Head-First设计模式】C#版-学习笔记-开篇及文章目录
    【博客美化】03.分享按钮
    【博客美化】02.公告栏显示个性化时间
    【博客美化】文章目录
    MySql字段类型及字节
    数据库设计原则
  • 原文地址:https://www.cnblogs.com/dcotorbool/p/8508609.html
Copyright © 2011-2022 走看看