zoukankan      html  css  js  c++  java
  • python3.x 类和对象

      python同样支持类和对象。在python3.x中没有了经典类,只有新式类,默认创建的就是新式类。具体的新式类与经典类的不同在python3.x中已经没有意义了。

      类的定义和实例化

      python定义简单类如下。

    class Car(object):
        pass
    
    c1=Car()

      我们定义了一个Car类,其中什么方法也没有实现。c1是我们实例化的类Car,成为对象。

      静态变量

      我们可以在类中定义静态变量,静态变量属于类,既可以使用类访问,也可以使用对象访问。

    class Car(object):
        type='car'
    
    c1=Car()
    print(c1.type)
    print(Car.type)

      运行结果是:

    car
    car

      动态变量

      动态变量属于类,在第一次创建类的时候传入类中。动态变量只属于对象,只能由对象访问。

    class Car(object):
        type='car'
    
        def __init__(self, name, colour):
            self.name = name
            self.colour = colour
            print('我被创建了。')
    
    c1=Car('Lamborghini','yellow')
    print(c1.type)
    print(Car.type)
    print('name:%s,colour:%s'%(c1.name,c1.colour))

      运行结果是:

    我被创建了。
    car
    car
    name:Lamborghini,colour:yellow

      类被创建的时候就会访问__init__()方法,上面的类__init__方法中请求了两个参数,所以创建的时候就必须要传入两个传输,其中self的意思是对象本身,以本例来说,当创建Car的实例c1时,self就是c1。

      因为作用域的原因,传入的两个参数只能在__init__()中使用,如果想要在其它地方调用,就需要将值传给self。而这个参数就被称为动态参数。

      动态方法

      类的动态方法是自定义的方法,同时只有对象能够调用。

    class Car(object):
        type='car'
    
        def __init__(self, name, colour):
            self.name = name
            self.colour = colour
            print('我被创建了。')
        def show(self):
            print("The car's name is %s and colour is %s." % (self.name, self.colour))
            
    c1=Car('Lamborghini','yellow')
    print(c1.type)
    print(Car.type)
    print('name:%s,colour:%s'%(c1.name,c1.colour))
    c1.show()

      运行结果是:

    我被创建了。
    car
    car
    name:Lamborghini,colour:yellow
    The car's name is Lamborghini and colour is yellow.

      show()就是类的动态方法。

      静态方法

      有动态方法必然会有静态方法。静态方法属于类,类和对象都可以进行调用。

    class Car(object):
        @staticmethod
        def description():
            print('This is a very fast car.')
    
    c1=Car()
    c1.description()
    Car.description()

      静态方法的写法就是在动态方法前加入装饰器,并且不传入self参数。

      类的属性

      在方法前面加入@property装饰器,这个方法就变成了类的属性,可以以调用属性的方式进行方法的调用。

    class Car(object):
        def __init__(self, name, colour):
            self.name = name
            self.colour = colour
        @property
        def show(self):
            print("The car's name is %s and colour is %s." % (self.name, self.colour))
    
    c1=Car('Lamborghini','yellow')
    c1.show

      运行结果是:

    The car's name is Lamborghini and colour is yellow.

      可见,运行的时候不需要添加括号。

      私有变量

      在变量前面加入两个下划线就将这个变量变为了私有变量,创建的对象没有变法访问私有变量,私有变量只能内部访问。那么私有变量怎么显示呢?

    class Car(object):
        def __init__(self, name, colour):
            self.__name = name
            self.__colour = colour
        def show(self):
            print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
    
    c1=Car('Lamborghini','yellow')
    c1.show()

      运行结果是:

    The car's name is Lamborghini and colour is yellow.

      私有变量能在类内部定义方法进行读取。

      利用类的特性也可以访问私有字段。

    lass Car(object):
        def __init__(self, name, colour):
            self.__name = name
            self.__colour = colour
        def show(self):
            print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
        @property
        def name(self):
            return self.__name
    
    c1=Car('Lamborghini','yellow')
    c1.show()
    print(c1.name)

      运行结果是:

    The car's name is Lamborghini and colour is yellow.
    Lamborghini

      通过设定和私有字段相似的名称的特性名称,从程序外部看来就好像是访问了私有字段一样,这种方法也是可以访问私有字段的。

      私有方法

      将方法前面加上两个下划线就会变成私有方法,外部就无法访问这个方法了。而如果要访问这个方法只能在类的内部才可以访问。

    class Car(object):
        def __init__(self, name, colour):
            self.__name = name
            self.__colour = colour
        def __show(self):
            print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
        def func(self):
            self.__show()
    
    c1=Car('Lamborghini','yellow')
    c1.func()

      运行结果是:

    The car's name is Lamborghini and colour is yellow.

      私有方法也可以使用以下方法进行调用,但是并不建议这样使用。

    class Car(object):
        def __init__(self, name, colour):
            self.__name = name
            self.__colour = colour
        def __show(self):
            print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
        def func(self):
            self.__show()
    
    c1=Car('Lamborghini','yellow')
    c1._Car__show()

      运行结果是:

    The car's name is Lamborghini and colour is yellow.

      私有变量更改

      如果我们必须更改私有变量呢?其实也是有办法的,可以使用以下的方法。

    class Car(object):
        def __init__(self, name, colour):
            self.__name = name
            self.__colour = colour
        def show(self):
            print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
        @property
        def func(self):
            return self.__name
        @func.setter
        def func(self,value):
            self.__name=value
    
    c1=Car('Lamborghini','yellow')
    c1.show()
    c1.func='car'
    c1.show()

      运行结果是:

    The car's name is Lamborghini and colour is yellow.
    The car's name is car and colour is yellow.

      这样就实现了私有变量的更改的操作

      析构函数

      __init__()在对象被创建的时候进行调用,成为构造函数。而对象被销毁的时候就会调用__del__()函数,成为析构函数。

    class Car(object):
        def __init__(self):
            print('我被创建了')
        def __del__(self):
            print('我要被销毁了')
    
    c1=Car()

      运行结果是:

    我被创建了
    我要被销毁了

      __call__方法

      python中也有一个方法叫做__call__(),这个方法是干什么用的呢?当对象作为一个函数进行执行的时候,就会执行这个方法。

    class Car(object):
        def __call__(self, *args, **kwargs):
            print('call')
    
    c1=Car()
    c1()

      运行结果是:

    call

      可以看到使用这个方法之后,对象就能添加括号直接进行执行了。

      

  • 相关阅读:
    CSS浏览器兼容----IE的定制CSS样式
    CSS浏览器兼容---判断IE版本的HTM语句
    单链表操作1
    数学建模1
    浏览器内核学习笔记二
    浏览器内核学习笔记一
    网页使用特殊字体
    SQL Server 2008 R2没有卸载干净
    RadioButtonFor绑定值
    SVN 服务启动报错 0x8007042a
  • 原文地址:https://www.cnblogs.com/cdinc/p/5860351.html
Copyright © 2011-2022 走看看