notas de estudio Python --Day04

notas de estudio Python --Day04

El cuarto día, continuará combustible, arranque orientado a objetos

categoría

El uso de la palabra clave class para definir las clases y los métodos definidos por una función previamente aprendido en clase, y luego crear un objeto, de modo que usted puede ir a través de algunos de los datos de los objetos almacenados o llame a la conducta apropiada. Primer vistazo a un código de ejemplo

class Person(object):

    def __init__(self, name, age, father):
        self.name = name
        self.age = age
        self.__father = father

    def __speak_father(self):
        print("my father is", self.__father)

    def speak(self):
        print("I'm a person, and my name is %s, and I'm %d years old" % (self.name, self.age))


def main():
    person1 = Person("zhangsan", 12, "zhanger")
    person2 = Person("lisi", 13, "lisan")
    person1.speak()
    person2.speak()
    # person2.__speak_father()
    # 访问私有方法
    person2._Person__speak_father()


if __name__ == "__main__":
    main()

En este código, __ método init__ es equivalente al constructor en Java, la operación de inicialización se lleva a cabo cuando se crea un objeto, __ speak_father este método es un método privado, la disposición no es que queremos llamar a este método a través de un objeto directamente, pero en realidad tenemos que llamar al método principal por cierto, pero eso sería romper las reglas, no lo recomiendan este tipo de operaciones, a partir de un guión bajo _ método es un método protegido, solamente un objeto de esta clase o subclase objeto de llamada, hable el método es un método común, siempre y cuando el objeto la persona puede seguir llamar a este método.

base orientada a objetos

Objeto (Object Oriented, OO) es una metodología de desarrollo de software orientado-, se refiere al uso de la programación orientada a objetos en los métodos de paquetes, herencia, polimorfismo y otra de diseño, desarrollo orientado a objetos, de estos tres es la más importante de las tres características, miramos uno a uno ¿Cuál es el paquete, las propiedades del objeto oculto y detalles de implementación, a las afueras de la provisión de acceso público, por lo que cuando usamos estos objetos, nuestras relaciones son única interfaz abierta, no necesitan saber los detalles de implementación, y el código encapsulado, el acoplamiento se puede reducir en cierta medida, mejorar la reutilización de código. La herencia es la relación entre clase y clase, la definición de clase que ya existe como base para definir una nueva clase basada en esta nueva clase puede extender una nueva propiedad o método, puede utilizar la clase padre definido función. Polimórficos se reduce a las referencias de clases de padres a los objetos de las subclases, esta frase es Java a menudo se dice, lo que significa eso, que es una referencia a una variable de instancia de objeto al final qué tipo de punto, se emite la llamada al método variable de referencia qué métodos de clase implementadas deben resolverse antes de que el programa se está ejecutando. Sobre orientado a objetos, no voy a describir en detalle, la específica puede ir a ver "Pensando en Java" dentro de la introducción, la cantidad, porque cuando me enteré de Java para ver esta parte impresionado, se recomienda que también echar un vistazo, la lectura de este libro que más me impresionó es la frase, "todo es un objeto", así como el punto de sentido en ella, lo que significa específicamente para explorar por su cuenta filosófica.

decorador @property

El ejemplo anterior muestra la persona de la propiedad, dos públicas y una privada, hay dos maneras de que no se recomienda, después de todo, las propiedades del objeto expuesto directamente al mundo exterior es un problema, por lo que estos atributos se establecen en protegida, se ha mencionado anteriormente, es añadir un guión bajo _.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:@property包装器包装getter和setter方法


class Person(object):

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age

    @name.setter
    def name(self, name):
        self._name = name

    def speak(self):
        print("I'm a person, and my name is %s, and I'm %d years old" % (self._name, self._age))


def main():
    person = Person('zhangsan', 12)
    person.speak()
    person.age = 11
    person.name = 'lisi'
    person.speak()
    print(person.age)


if __name__ == "__main__":
    main()

Este título párrafo es lo que esto significa, es un dispositivo de acceso para proporcionar un método de obtención, el código @name.setterutilizado para proporcionar métodos setter, porque todavía tenemos que modificar el valor del atributo correspondiente, por lo que estos dos métodos de acceso que se pueden hacer modificación y acceso. Directamente a través de la 对象名.属性名forma en que podemos hacerlo.

__slots__ uso

No acaba de presentar a, Python es un lenguaje dinámico, es la nueva propiedad o método podemos unirán a la diana en el programa se está ejecutando, puede también desagregación de las propiedades y métodos habían atado. Y __slots__es capaz de propiedades del objeto de enlace que sea limitante, la clase de objeto puede ser obligado a limitar los atributos de tuplas.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:slots的使用


class Person(object):

    __slots__ = ('_name', '_age', '_gender')

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @name.setter
    def name(self, name):
        self._name = name

    @age.setter
    def age(self, age):
        self._age = age

    def speak(self):
        print("I'm a person, and my name is %s, and I'm %d years old" % (self.name, self.age))


def main():
    person = Person('zhangsan', 12)
    person._gender = '男'
    print(person.name)
    print(person._gender)
    person._nana = "nana"
    print(person._nana)


if __name__ == "__main__":
    main()

Este código se puede ejecutar, y luego buscar en la información de la consola cayó en su lugar.

Los métodos estáticos y métodos de la clase

Método estático es que se puede directamente a través del nombre de la clase para llamar a un método, similar a los métodos de la clase y los métodos estáticos, la primera convención parámetro llamado CLS, que representa a la clase actual de los objetos de información relevante, podemos obtener a través de este parámetro y la clase asociada información y puede crear objetos de la clase.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:静态方法和类方法


class AddUtil(object):

    @staticmethod
    def add(*num):
        total = 0
        for item in num:
            total += item
        print(total)

    @classmethod
    def add_num(cls):
        return cls.add(1, 1, 1)


def main():
    AddUtil.add(1, 1, 1, 1, 1, 1)
    AddUtil.add_num()


if __name__ == "__main__":
    main()

método de reescritura

Subclase hereda la clase padre puede tener que volver a escribir la clase padre existente, reescribiendo, podemos hacer diferentes subclases llaman la misma interfaz para mostrar un comportamiento diferente se ha mencionado anteriormente polimórfica.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:方法的重写
from abc import abstractmethod, ABCMeta


class Person(object, metaclass=ABCMeta):
    """人类"""

    @abstractmethod
    def speak(self, name):
        pass


class Student(Person):
    """学生类"""
    def speak(self, name):
        print("%s是本学生的名字" % name)


class Worker(Person):
    """工人类"""
    def speak(self, name):
        print("%s是本工人的名字" % name)


def main():
    student = Student()
    student.speak("zhangsan")
    worker = Worker()
    worker.speak("lisi")


if __name__ == "__main__":
    main()

No es la clase define un método abstracto persona, por lo tanto clase Person es una clase abstracta, clase abstracta no es crear objetos de la clase es permitir que otras clases hereden esta clase y luego implementar la función apropiada, puede abcbloquear ABCMetametaclase y la abstractmethodenvoltura para lograr una clase abstracta, la clase Person código del método de hablar más alto que es un método abstracto, por lo tanto no puede crear los objetos de la clase Persona.

expediente

operaciones de persistencia de datos de desarrollo real, la forma más directa se guarda en un archivo. Sólo los archivos pitón escritura es muy simple, integrado en función de apertura, se puede especificar un nombre de archivo, modo de operación, tales como el acceso a los archivos codificados objeto de información puede manipular archivos, a continuación, sólo se puede escribir en el archivo. Mesa de operaciones modo de continuación (Tabla archivos del tutorial de Python y Luo Hao excepción de 100 días).

Modo de operación significado específico
'r' Lectura (por defecto)
'w' Escritura (contenido anterior será la primera de corte)
'x' Escritura, si el archivo ya existe genera una excepción
'a' Anexar, escribir el contenido hasta el final de un archivo existente
'b' El modo binario
't' el modo de texto (por defecto)
'+' Actualización (leer y puede escribir)

Cuando un archivo de texto de lectura y escritura, la ruta anterior de tres especificado con una buena función abierta usando el nombre del archivo, y el modo de operación de la segunda, la tercera es la codificación, la ruta puede ser relativa o una ruta absoluta, el modo de funcionamiento es el valor predeterminado r, que codifica un archivo con los parámetros que codifican especifica la codificación de ser coherente, de lo contrario hará falta leer.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:文件读取小例子


def main():
    file = open('README.txt', 'r', encoding='utf-8')
    print(file.read())
    file.close()


if __name__ == "__main__":
    main()

anormal

Al igual que el código anterior es probablemente porque no existe el archivo o es inconsistente de codificación no se puede abrir, a continuación, una condición anormal hace que el programa se bloquee. Así mecanismo de excepciones pitón para proporcionar una mejor tolerancia a fallos y la solidez de nuestro código.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:文件读取


def main():
    file = None
    try:
        file = open('README.txt', 'r', encoding='utf-8')
        print(file.read())
    except FileNotFoundError:
        print("无法打开该文件")
    except LookupError:
        print('指定了未知的编码!')
    except UnicodeDecodeError:
        print('读取文件时解码错误!')
    finally:
        file.close()


if __name__ == "__main__":
    main()

Podemos probablemente un código de error que se está ejecutando en un bloque de código try en la parte posterior puede ser seguido por un número, excepto tratar de capturar excepciones que pueden ocurrir, utilizado por última vez, finalmente, a los archivos abiertos cercanos, liberar recursos, finalmente bloquear independientemente de los procedimientos normales o anormal se ejecutará, denominado "siempre ejecutar el bloque de código" se utiliza como una operación para liberar los recursos más apropiados. También puede utilizar la sintaxis contexto, el archivo se libera automáticamente cuando el recurso por palabra clave especifica el archivo con el contexto y dejar el contexto del objeto.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:with


def main():
    try:
        with open('README.txt', 'r', encoding='utf-8') as file:
            print(file.read())
    except FileNotFoundError:
        print("无法打开该文件")
    except LookupError:
        print('指定了未知的编码!')
    except UnicodeDecodeError:
        print('读取文件时解码错误!')


if __name__ == "__main__":
    main()

objetos de archivo tienen readlines, que puede leer la lista de archivos en filas a un contenedor, el código siguiente.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:with


def main():
    try:
        with open('README.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            print(lines[0])
    except FileNotFoundError:
        print("无法打开该文件")
    except LookupError:
        print('指定了未知的编码!')
    except UnicodeDecodeError:
        print('读取文件时解码错误!')


if __name__ == "__main__":
    main()

Puede ir atravesado por for-in, sólo el índice 0 es porque mi archivo es sólo una línea.

Caja estándar de copia de archivos

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:


def main():
    try:
        with open('123.png', 'rb') as file1:
            data = file1.read()
            print(data)
        with open('copy_123.png', 'wb') as file2:
            file2.write(data)
    except FileNotFoundError as e:
        print('指定的文件无法打开.')
    except IOError as e:
        print('读写文件时出现错误.')
    print('程序执行结束.')


if __name__ == "__main__":
    main()

leer JSON

Ahora, como un formato JSON para intercambiar datos entre sistemas heterogéneos son muy populares, el conocimiento sobre el JSON, JSON puede consultar la página web oficial.

{
	"name": "zhangshan",
	"age": 12,
	"books": [
		{"name": "book1", "price": 12},
		{"name": "book2", "price": 14}
	]
}

Y un diccionario de ella, y la correspondencia Python es como sigue.

JSON Pitón
objeto dict
formación lista
cuerda str
número (int / real) int / flotador
verdadero Falso Verdadero Falso
nulo Ninguna
Pitón JSON
dict objeto
lista, tupla formación
str cuerda
int, float, Enums Int- y flotador derivados número
Verdadero Falso verdadero Falso
Ninguna nulo

módulo json pitón en la siguiente.

#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:json的使用
import json


def main():
    someone = {
        "name": "zhangshan",
        "age": 12,
        "books": [
            {"name": "book1", "price": 12},
            {"name": "book2", "price": 14}
        ]
    }
    try:
        with open("data.json", 'w', encoding='utf-8') as file1:
            json.dump(someone, file1)
    except IOError as e:
        print(e)
    print("数据保存完成!")


if __name__ == "__main__":
    main()

módulo de JSON en cuatro funciones principales:

  • dump - El formato JSON serializado Python objeto de acuerdo con un archivo
  • dumps - Python procesamiento de objetos cadena en formato JSON
  • load - el archivo de datos JSON en objetos deserialized
  • loads - El contenido de la cadena deserializados en objetos Python
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:json
import json


def main():
    temp_dict = {'name': 'zhangsan', 'age': 12, 'role': 'student'}
    json_str = json.dumps(temp_dict)
    print(json_str)
    # 因为文件存在所以就没有进行try-except
    file = open('data.json', 'r')
    temp_dict1 = json.load(file)
    print(temp_dict1['name'])
    file.close()
    

if __name__ == "__main__":
    main()

epílogo

El cuarto día también vio mucho, seguir trabajando duro!

Si encontrar mis artículos en los que hay un error o tiene alguna buenas ideas pueden ponerse en contacto conmigo, estudiamos juntos progresar juntos, mi dirección de correo electrónico está [email protected]

Vamos a hacer más de esos!

Publicado 26 artículos originales · ganado elogios 2 · Vistas 2345

Supongo que te gusta

Origin blog.csdn.net/qq_42909545/article/details/93708851
Recomendado
Clasificación