• python学习对象


    对象= 属性+方法

    创建一个类对象

    class Turtle: # Python 中的类名约定以大写字母开头
        """关于类的一个简单例子"""
        #属性
        color = 'green'
        weight = 10
        legs = 4
        shell = True
        mouth = '大嘴'
    
        # 方法
        def climb(self):
            print('我正在努力的向前爬...')
    
        def run(self):
            print('我正在飞快地跑...')
            
        def bite(self):
            print('咬死你')
            
        def eat(self):
            print('有的吃')
            
        def sleep(self):
            print('睡了')
    

      

    >>> tt = Turtle()
    >>> tt.climb()
    我正在努力的向前爬...
    >>> tt.bite()
    咬死你
    >>> tt.sleep()
    睡了

    OO的特征(object oriented面向对象)

      封装   信息隐蔽技术

      继承   子类自动共享父类之间的数据和方法的机制

    >>> class MyList(list):
    	pass
    
    >>> list2 = MyList()
    >>> list2.append(5)
    >>> list2.append(3)
    >>> list2.append(7)
    >>> list2
    [5, 3, 7]
    

    list2继承了list函数的所有方法

      多态   不同对象对不同方法响应不同的行动

    >>> class A:
    	def fun(self):
    		print('我是A')
    
    		
    >>> class B:
    	def fun(self):
    		print('我是B')
    
    		
    >>> a = A()
    >>> b = B()
    >>> a.fun()
    我是A
    >>> b.fun()
    我是B
    

    self是什么?

    相当于C++的this指针

    同一个类可以生成无数对象,对象调用方法,对象名会传给self,方法里的self就会替换成该对象

    >>> class Ball:
    	def setName(self, name):
    		self.name = name
    	def kick(self):
    		print('我叫%s'% self.name)
    
    		
    >>> a = Ball()
    >>> a.setName('球A')
    >>> b = Ball()
    >>> b.setName('球B')
    >>> c = Ball()
    >>> c.setName('土豆')
    >>> a.kick()
    我叫球A
    >>> c.kick()
    我叫土豆
    

    name mangling名字重造

      私有函数变量:在名字前加两个下划线

    >>> class Person:
    	__name = 'xiao'
    	def getName(self):
    		return self.__name
    
    	
    

    无法使用XX.__name调用这个对象的name,只能间接用内部方法调用出名字,达到隐藏内部变量的目的,但是其实只是改成XX._Person_name

    继承

    class DerivedClassName(BaseClassName):

    class 子类名(父类名):

    >>> class Parent:
        def hello(self):
            print("调用父类方法")
    
            
    >>> class Child(Parent):
        pass
    
    >>> p = Parent()
    >>> p.hello()
    调用父类方法
    >>> c = Child()
    >>> c.hello()
    调用父类方法

    如果子类中定义与父类同名的方法属性,则会覆盖

    解决办法

    1,调用未绑定的父类方法

    class Shark(Fish):
        def __init__(self):
            Fish.__init__(self)    #调用父类
            self.hungry = True

    2,使用super函数更好

    class Shark(Fish):
        def __init__(self):
            super().__init__()    #使用super函数
            self.hungry = True

    多重继承,继承父类的方法和属性

    class 子类名(父类1,父类2,...)

  • 相关阅读:
    prototype常用函数
    SQL Left Join,用于在网站中显示相关联的内容
    .net中ajax实现检测用户名的完整测子
    绑定数据源后,Repeater在创建时触发的事件,以及如果在cs文件中调用某个字段的值
    sql2005 转换到 sql2000
    FCKeditor 2.6.3在ASP.NET中的配置方法
    怎样和老板谈绩效考核(3)
    If Tomorrow Never Comes
    为何会被拒(1)
    为何会被拒(2)
  • 原文地址:https://www.cnblogs.com/jdzhang1995/p/10329915.html
Copyright © 2020-2023  润新知