>  기사  >  백엔드 개발  >  초보자를 위해 편집된 세 번째 Python 지식 포인트

초보자를 위해 편집된 세 번째 Python 지식 포인트

coldplay.xixi
coldplay.xixi앞으로
2020-11-13 16:47:561880검색

python 동영상 튜토리얼이 칼럼에서는 세 번째 Python 지식 포인트를 소개합니다.

초보자를 위해 편집된 세 번째 Python 지식 포인트

이번 글은 세 번째 글입니다. 파이썬의 기초를 다지는 글은 총 4편입니다

위의 두 글은 기본적으로 파이썬의 데이터 구조를 해결했습니다. 다음으로 가장 중요한 글을 하나 다루겠습니다. 수업.

7. 객체 지향 프로그래밍

모든 것은 객체이며 Python은 확실히 객체 지향 프로그래밍을 지원합니다. 클래스와 객체는 객체 지향 프로그래밍의 두 가지 주요 측면입니다. 클래스는 새 객체를 생성하고 객체는 이 클래스의 인스턴스입니다.

객체는 클래스의 변수를 사용할 수 있으며 객체 또는 클래스에 속한 변수를 필드라고 합니다. 객체도 클래스에 속한 함수를 사용할 수 있으며 이러한 함수를 클래스의 메서드라고 하며 메서드를 집합적으로 속성이라고 합니다. 수업.

인스턴스에 속하는

    클래스 자체에 속하는
  • 두 가지 유형의 필드가 있습니다. 각각 인스턴스 변수와 클래스 변수라고 합니다.
클래스는 키워드 class를 사용하여 생성되며, 클래스의 필드와 메서드는 들여쓰기 블록에 나열됩니다.

클래스의 메소드에는 추가 첫 번째 매개변수가 있어야 하지만 이 매개변수는 호출 시 값이 할당되지 않습니다. 이 특수 변수는 관례적으로 Java의 이름과 유사합니다.

class创建,类的域和方法被列在一个缩进块中。

类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例它的名称是self,类似Java中的this。

在类中下面两个特都方法需要注意:

  • __init__方法:在类的一个对象被创建时调用该方法;相当于c++中的构造函数,就是当这个类调用了,那么这个__init__ 方法就要执行。

  • __del__클래스에서 다음 두 가지 특수 메소드에 주의해야 합니다.

__init__ 메소드: 이 메소드는 클래스의 객체가 생성될 때 호출되며 생성자와 동일합니다. C++에서는, 즉 이 클래스가 호출되면 __init__ 메소드가 실행됩니다.

__del__ 메서드: 이 메서드는 클래스의 개체가 소멸될 때 호출됩니다. C++의 소멸자와 동일합니다. del을 사용하여 객체를 삭제할 때 __del__ 메서드도 호출되며 __del__이 마지막으로 호출됩니다.

Python의 모든 클래스 멤버(데이터 멤버 포함)는 공개 클래스입니다. 즉, 작성은 매우 간단하지만 모든 사람이 호출 클래스를 갖습니다. 그러나 모든 사람이 마음대로 리소스를 할당하고 액세스할 수 있는데 이는 실제로 프로젝트에서 나쁜 것입니다.

그러나 Python 클래스에는 개인 변수와 개인 메서드가 있습니다. 사용된 데이터 멤버 앞에 이중 밑줄이 붙는 경우 이는 개인 변수입니다.

이 클래스를 인스턴스화하면 액세스할 수 없습니다. 이것은 많은 사람들이 무시하는 것입니다

예:

class public():
    _name = 'protected类型的变量'
    __info = '私有类型的变量'
    def _f(self):
        print("这是一个protected类型的方法")    def __f2(self):
        print('这是一个私有类型的方法')    def get(self):
        return(self.__info)
pub = public()# 先打印可以访问的print(pub._name)
pub._f()####结果如下####protected类型的变量
这是一个protected类型的方法# 打印下类 私有变量和私有方法print(pub.__info)
报错:'public' object has no attribute '__info'pub._f2()
报错:pub._f2()复制代码

하지만 전용 속성과 메서드는 동일한 클래스에서 호출될 수 있습니다

pub.get()#######'私有类型的变量'复制代码

많은 사람들이 위 내용을 모릅니다. 다음으로 Person 클래스를 선언하겠습니다.

   class Person():
    Count = 0
    def __init__(self, name, age):
        Person.Count += 1
        self.name = name
        self.__age = age
    
p = Person("Runsen", 20)

print(p.Count)# 1 说明我实例化,这个__init__方法就要执行print(p.name) #Runsenprint (p.__age) 
#AttributeError: Person instance has no attribute '__age'#私有变量访问不了,报错复制代码

8 . 상속

객체 지향 프로그래밍(OOP), 정식 영어 이름: 객체 지향 프로그래밍, 객체 지향 프로그래밍의 주요 기능 중 하나는 "상속"입니다. 상속은 기존 클래스의 모든 기능을 사용하고 원래 클래스를 다시 작성하지 않고도 확장할 수 있는 기능입니다.

상속, 실제로 이렇게 이해하면 아버지 클래스와 아들 클래스를 작성했다는 것입니다. 아버지는 돈이 있지만 아들은 돈이 없어서 아들이 아버지를 상속받아 아버지의 돈을 부르기로 결정했습니다(변수 및 메소드). 아버지 클래스의).

클래스를 상속받아 기본적으로 다음 5가지 메소드를 사용합니다. super()拿你的私房钱,但是这里需要注意super()强制调用父类私有属性方法,就是重写方法,私有变量是不能用supper继承不了,还不可以访问父类中的私有属性方法的变量,就是儿子是拿不了私房钱的。

class Father():
    def __init__(self):
        self.money= 1000 
    def action(self):
        print('调用父类的方法') 
class Son(Father):
    pass
 son=Son()     # 子类Son 继承父类Father的所有属性和方法son.action()  # 调用父类属性输出:调用父类的方法
son.money     # 调用父类属性输出:1000复制代码

8.3 重写父类属性方法;

突然间儿子竟然有钱,决定不用爸爸的钱,用自己的钱,决定重写父类属性方法。

class Father():
    __money  = 1000 #私有变量是继承不了
    
    def __action(self):  # 父类的私有方法
        money = 1000
        print('调用父类的方法') 
class Son(Father):
        
    def action(self):
        super()._Father__action()
        print(money) 
        
son=Son()
son.action() 

调用父类的方法
name 'money' is not defined复制代码

8.4 调用父类的__init__方法

如果爸爸把钱放在__init__

8.1 부모 클래스 속성 메서드를 직접 호출합니다.

아버지가 부자인데 아들이 돈이 없어서 아들이 아버지의 돈을 사용합니다.

class Father():
    def __init__(self):
        self.money = 0
    
    def action(self):
        print('调用父类的方法') 
class Son(Father):
    def __init__(self):
        self.money = 1000
      
    def action(self):
        print('子类重写父类的方法')
 
son=Son()     # 子类Son继承父类Father的所有属性和方法son.action()  # 子类Son调用自身的action方法而不是父类的action方法son.money     # 自己的1000复制代码
8,2 강제로 부모 클래스의 개인 속성 메서드를 호출합니다. 아빠가 말했지, 아들아, 나는 항상 내 돈을 써서 내 사적인 돈을 숨기기로 결정했다. 아들아, 개인 돈을 얻으려면 super()를 시도해 보세요. 하지만 여기서는 super()가 부모 클래스의 개인 속성 메서드를 강제로 호출한다는 점에 유의해야 합니다. 재정의된 메서드 전용 변수는 저녁 식사를 사용하여 상속할 수 없으며 부모 클래스의 전용 속성 메서드 변수에 액세스할 수 없습니다.

class Father():
    def __init__(self):
        self.money = 1000
 class Son(Father):
    def __init__(self):
        pass
    son=Son()
print(son.money)# 报错:'Son' object has no attribute 'money'复制代码

8.3 부모 클래스 속성 메서드를 다시 작성합니다.

갑자기 부자가 된 아들은 아버지의 돈을 사용하지 않고 자신의 돈을 사용하기로 결정했습니다. 상위 클래스 속성 메서드를 재정의하기로 결정했습니다.

class Father():
    def __init__(self):
        self.money = 1000
 class Son(Father):
    def __init__(self):
        super().__init__()        #也可以用 Father.__init__(self)  这里面的self一定要加上(上面两个相同)
        
        son=Son()
print(son.money) 

1000复制代码

8.4 부모 클래스의 __init__ 메소드를 호출하세요

아버지가 __init__에 돈을 넣으면 아들이 그 돈을 받을 수 있나요? 아버지 돈? 개인변수가 아니니 개인돈도 아니죠 당연히 얻을 수 있죠

슈퍼를 사용하지 않고도 얻을 수 있는지 먼저 알아볼까요?

class Father():
    def __init__(self):
        self.earn_money=1000
        self.spend_money= -500
 class Son(Father):
    def __init__(self):
        super().__init__()        #也可以用 Father.__init__(self)  这里面的self一定要加上
        
    def add(self):
        return self.earn_money+self.spend_money
        
        
son=Son()
print(son.add())500复制代码
슈퍼도 안쓰는건 돈을 훔치는거랑 똑같고, 아빠와 나를 무시하는거잖아.

class Father():
    def __init__(self,a,b):
        self.earn_money = a
        self.spend_money= b    def add(self):
        return self.a + self.b 
#调用父类初始化参数a,b并增加额外参数cclass Son(Father):
    def __init__(self,a,b,c=1000):  # c固定值
        Father.__init__(self,a,b)  
        self.son_money = c        
    def add(self):
        return self.earn_money+self.spend_money + self.son_money
        
   
        
son=Son(1000,-500)   # 所以c可以不用显示表达出来print(son.add())     # 调用子类add函数1500复制代码

8.5 부모 클래스의 초기화 과정에서 매개변수 상속

때때로 아빠는 돈을 벌고 써야 하는데, 이것이 초기화 과정의 매개변수입니다. 아들은 호기심이 많아 아버지가 돈이 얼마나 되는지 알아보기로 했습니다. 아직도 주머니에 있었어. 🎜🎜earn_money와 write_money를 먼저 적어두었습니다🎜
In [1]: input()1Out[1]: '1'复制代码
🎜아들은 아버지가 돈이 부족하다는 것을 알고 몰래 돈을 가져갔습니다. 🎜
test = '''\
This is a program about file I/O.
Author: Runsen
Date: 2020/3/31
'''f = open("test.txt", "w") 
f.write(test) 
f.close() 

f = open("test.txt") #默认rwhile True:
    line = f.readline()    if len(line) == 0:  
        break
    print(line)
f.close()######This is a program about file I/O.

Author: Runsen

Date: 2020/3/31复制代码
🎜위에서는 기본적으로 Python 클래스의 상속과 상위 클래스의 속성 및 메서드를 호출하는 기본 내용을 다루었습니다. 이해를 돕기 위해 몇 가지 사례를 직접 작성할 수도 있습니다. 🎜🎜9. 입력/출력🎜🎜프로그램과 사용자 간의 상호 작용에는 주로 콘솔과 파일이 포함된 입력/출력이 필요하며 입력 및 인쇄를 사용할 수 있습니다. 입력(xxx) 입력 xxx, 그런 다음 사용자의 입력을 읽고 반환합니다. 🎜
In [1]: input()1Out[1]: '1'复制代码

10、文件输入/输出

可以使用file类打开一个文件,使用file的read、readline和write来恰当的读写文件。对文件读写能力取决于打开文件时使用的模式, 常用模式

  • 读模式("r")
  • 写模式("w")
  • 追加模式("a")

文件操作之后需要调用close方法来关闭文件。如果用with open就不用slose了。

还有r+,w+,a+

  • r:仅仅表示读入
  • r+:既可以读取还可以写入
  • w: 仅仅表示写入
  • w+:既可以读取还可以写入

但r+与w+不同的是,不会把原先存在txt中的东西清空,下面是他们的对比,反正尽量用a+,基本没什么错报出来。

描述 r+ w+ a+
当前文件不存在时文件 抛出异常 创建文件 创建文件
打开后原文件内容 保留 清空 保留
初始位置 0 0 文件尾
写入位置 标记位置 标记位置 写入时默认跳至文件尾

补充个例子吧:

test = '''\
This is a program about file I/O.
Author: Runsen
Date: 2020/3/31
'''f = open("test.txt", "w") 
f.write(test) 
f.close() 

f = open("test.txt") #默认rwhile True:
    line = f.readline()    if len(line) == 0:  
        break
    print(line)
f.close()######This is a program about file I/O.

Author: Runsen

Date: 2020/3/31复制代码

11、存储器

存储器,大家应该不知道。python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用c写的,要比pickle速度快(大约快1000倍)。

import pickle

datafile = "data.data"mylist = ["Runsen", "is", "20"]

f = open("test.txt", "wb+")
pickle.dump(mylist, f)
f.close()del mylist

f = open(datafile,'rb+')
mylist = pickle.load(f)

print(mylist)#["Runsen", "is", "20"]复制代码

12、异常

当程序中出现某些异常的状况时,异常就发生了。

python中可以使用try ... except 处理。

try:    print (1/0)except ZeropisionError as e:
    print(e)except:
    print( "error or exception occurred.")#integer pision or modulo by zero复制代码

相关免费学习推荐:python视频教程

위 내용은 초보자를 위해 편집된 세 번째 Python 지식 포인트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제