이번 글은 세 번째 글입니다. 파이썬의 기초를 다지는 글은 총 4편입니다
위의 두 글은 기본적으로 파이썬의 데이터 구조를 해결했습니다. 다음으로 가장 중요한 글을 하나 다루겠습니다. 수업.
모든 것은 객체이며 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'#私有变量访问不了,报错复制代码
객체 지향 프로그래밍(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复制代码
突然间儿子竟然有钱,决定不用爸爸的钱,用自己的钱,决定重写父类属性方法。
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复制代码
如果爸爸把钱放在__init__
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'复制代码
갑자기 부자가 된 아들은 아버지의 돈을 사용하지 않고 자신의 돈을 사용하기로 결정했습니다. 상위 클래스 속성 메서드를 재정의하기로 결정했습니다.
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复制代码
__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复制代码
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'复制代码
可以使用file类打开一个文件,使用file的read、readline和write来恰当的读写文件。对文件读写能力取决于打开文件时使用的模式, 常用模式
文件操作之后需要调用close方法来关闭文件。如果用with open就不用slose了。
还有r+,w+,a+
但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复制代码
存储器,大家应该不知道。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"]复制代码
当程序中出现某些异常的状况时,异常就发生了。
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!