Python 객체와 객체지향 기술에 대한 자세한 설명
이 기사의 예에서는 Python 개체와 개체 지향 기술을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
1 먼저 예제를 살펴보겠습니다 . 이 장에서는 다음 예제 프로그램을 설명합니다.
파일: fileinfo.py:
"""Framework for getting filetype-specific metadata. Instantiate appropriate class with filename. Returned object acts like a dictionary, with key-value pairs for each piece of metadata. import fileinfo info = fileinfo.MP3FileInfo("/music/ap/mahadeva.mp3") print "\n".join(["%s=%s" % (k, v) for k, v in info.items()]) Or use listDirectory function to get info on all files in a directory. for info in fileinfo.listDirectory("/music/ap/", [".mp3"]): ... Framework can be extended by adding classes for particular file types, e.g. HTMLFileInfo, MPGFileInfo, DOCFileInfo. Each class is completely responsible for parsing its files appropriately; see MP3FileInfo for example. """ import os import sys from UserDict import UserDict def stripnulls(data): "strip whitespace and nulls" return data.replace("{post.content}", "").strip() class FileInfo(UserDict): "store file metadata" def __init__(self, filename=None): UserDict.__init__(self) self["name"] = filename class MP3FileInfo(FileInfo): "store ID3v1.0 MP3 tags" tagDataMap = {"title" : ( 3, 33, stripnulls), "artist" : ( 33, 63, stripnulls), "album" : ( 63, 93, stripnulls), "year" : ( 93, 97, stripnulls), "comment" : ( 97, 126, stripnulls), "genre" : (127, 128, ord)} def __parse(self, filename): "parse ID3v1.0 tags from MP3 file" self.clear() try: fsock = open(filename, "rb", 0) try: fsock.seek(-128, 2) tagdata = fsock.read(128) finally: fsock.close() if tagdata[:3] == "TAG": for tag, (start, end, parseFunc) in self.tagDataMap.items(): self[tag] = parseFunc(tagdata[start:end]) except IOError: pass def __setitem__(self, key, item): if key == "name" and item: self.__parse(item) FileInfo.__setitem__(self, key, item) def listDirectory(directory, fileExtList): "get list of file info objects for files of particular extensions" fileList = [os.path.normcase(f) for f in os.listdir(directory)] fileList = [os.path.join(directory, f) for f in fileList if os.path.splitext(f)[1] in fileExtList] def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]): "get file info class from filename extension" subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:] return hasattr(module, subclass) and getattr(module, subclass) or FileInfo return [getFileInfoClass(f)(f) for f in fileList] if __name__ == "__main__": for info in listDirectory("/music/_singles/", [".mp3"]): print "\n".join(["%s=%s" % (k, v) for k, v in info.items()]) print
2 from module import를 사용하여 모듈을 가져옵니다.
이전에 배운 가져오기 모듈은 다음 구문을 사용합니다.
가져오기 모듈 이름
이런 식으로 이 모듈에서 항목을 사용해야 하는 경우 모듈 이름.XXX 형식을 전달해야 합니다. 예:
>>> import types >>> types.FunctionType <type 'function'> >>> FunctionType
모듈 이름을 사용하지 않고 직접 이름을 사용하면 오류가 발생하므로 다음을 인쇄하세요.
Traceback (most recent call last): File "<interactive input>", line 1, in <module> NameError: name 'FunctionType' is not defined
이제 모듈에서 이름을 가져오는 또 다른 구문을 살펴보세요.
모듈 이름에서 이름 가져오기
또는
을 사용하세요.모듈 이름 가져오기 *
예:
>>> from types import FunctionType
이렇게 하면 모듈 이름을 전달하지 않고 가져온 이름을 직접 사용할 수 있습니다. 예:
>>> FunctionType <type 'function'>
3가지 클래스 정의
클래스 정의 구문:
클래스 클래스 이름:
합격
또는
클래스 클래스 이름(기본 클래스 목록):
합격
패스는 파이썬의 키워드로 아무것도 하지 말라는 의미입니다.
클래스에 클래스 문서가 있을 수도 있습니다. 그렇다면 클래스 정의에서 첫 번째 항목이 되어야 합니다. 예:
class A(B) : " this is class A. "
클래스의 생성자는 다음과 같습니다:
__init__
그러나 엄밀히 말하면 이 형태의 객체를 생성한 후 자동으로 실행되는 메소드라고 볼 수 있습니다.
예:
class A(B) : "this is class A. " def __init__ (self): B.__init__(self)
여기서 클래스 A에 대한 생성자가 정의됩니다. 그리고 기본 클래스 B의 생성자가 이 안에서 호출됩니다.
Python에서는 파생 클래스를 생성할 때 기본 클래스의 생성자가 "자동으로" 호출되지 않는다는 점에 유의해야 합니다.모든 클래스 메서드는 이 포인터를 수신하는 데 사용됩니다.
호출 시 이 매개변수를 전달하지 마세요.
그러나 위와 같은 생성자에서는 기본 클래스의 __init()를 호출할 때 이 매개변수를 명시적으로 주어야 합니다.
4 클래스 인스턴스화
클래스를 인스턴스화하는 것은 다른 언어와 유사합니다. 다른 언어에는 클래스 이름을 함수 호출로 취급하면 됩니다.클래스 이름(매개변수 목록)
__init__의 첫 번째 매개변수 self.
는 매개변수 목록에 제공될 필요가 없습니다.
예:a = A()
클래스 또는 클래스의 인스턴스에 대한 문서를 볼 수 있습니다. 예를 들면 다음과 같습니다.
>>> A.__doc__ 'this is class A. ' >>> a.__doc__ 'this is class A. '
>>> a.__class__ <class __main__.A at 0x011394B0>
Python에는 클래스 데이터 멤버에 대한 특별한 선언문이 없습니다. 대신 할당 중에 "갑자기 생성"됩니다.
class A : def __init__(self) : self.data = []
이후에는 클래스 정의 내에 있습니다. 클래스에서 멤버 변수나 멤버 메서드를 사용하려면 self.name을 사용하여 한정해야 합니다.
따라서 일반적으로 어떤 방법으로든 self.member 이름에 값을 할당하면 됩니다.
그러나 __init__ 메소드에서는 모든 데이터 속성에 초기값을 할당하는 것이 좋습니다.
파이썬은 함수 오버로딩을 지원하지 않습니다.
여기서 코드 들여쓰기에 대해 이야기해 보겠습니다. 실제로 코드 블록에 문장이 하나만 있는 경우 줄 바꿈이나 들여쓰기 형식 없이 콜론 바로 뒤에 배치할 수 있습니다.
6가지 특수 수업 방법
일반 메소드와는 다르게, 클래스에서 특수 메소드를 정의한 후에는 명시적으로 호출할 필요가 없습니다. 대신 Python이 특정 시점에 자동으로 호출합니다.데이터 항목을 가져오고 설정합니다.
이를 위해서는 클래스에서 __getitem__ 및 __setitem__ 메소드를 정의해야 합니다.
예:
>>> class A: ... def __init__(self): ... self.li = range(5) ... def __getitem__(self, i): ... return self.li[-i] ... >>> a = A() >>> print a[1]
과 같습니다.
__getitem__ 메소드와 유사한 것은 __setitem__입니다예를 들어 위의 클래스 A에 정의된 경우:
def __setitem__(self, key, item): self.li[key] = item
a[1] = 0은 a.__setitem__(1, 0)
을 호출하는 것과 같습니다.
7가지 고급 특수수업 방법
__getitem__ __setitem__과 유사하며 다음과 같은 몇 가지 특별한 전용 기능도 있습니다.
def __repr__(self): return repr(self.li)
과 같은 내장 함수를 통해 호출됩니다.
repr(a)
실제로 대화형 창에서 변수 이름을 입력하고 Enter 키를 누르면 변수 값이 표시됩니다.
def __cmp__(self, x): if isinstance(x, A): return cmp(self.li, x.li)
a = A() b = A() a == b
这里比较 a和b是否相等. 和调用 a.cmp(b) 一样
def __len__(self): return len(self.li)
它用来返回对象的长度. 在使用 len(对象) 的时候会调用它.
用它可以指定一个你希望的逻辑长度值.
def __delitem__(self, key): del self.li[key]
在调用 del 对象[key] 时会调用这个函数.
8 类属性
类属性指的是象c++中静态成员一类的东西.
Python中也可以有类属性. 例如:
class A : l = [1, 2, 3]
可以通过类来引用(修改). 或者通过实例来引用(修改). 如:
A.l
或
a.__class__.l
9 私有函数
Python中也有"私有"这个概念:
私有函数不可以从它们的模块外边被调用.
私有类方法不能从它们的类外边被调用.
私有属性不能从它们的类外边被访问.
Python中只有私有和公有两种. 没有保护的概念. 而区分公有还是私有是看函数. 类方法. 类属性的名字.
私有的东西的名字以 __ 开始. (但前边说的专用方法(如__getitem__)不是私有的).
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python文件与目录操作技巧汇总》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PS "로드"문제는 자원 액세스 또는 처리 문제로 인한 것입니다. 하드 디스크 판독 속도는 느리거나 나쁘다 : CrystalDiskinfo를 사용하여 하드 디스크 건강을 확인하고 문제가있는 하드 디스크를 교체하십시오. 불충분 한 메모리 : 고해상도 이미지 및 복잡한 레이어 처리에 대한 PS의 요구를 충족시키기 위해 메모리 업그레이드 메모리. 그래픽 카드 드라이버는 구식 또는 손상됩니다. 운전자를 업데이트하여 PS와 그래픽 카드 간의 통신을 최적화하십시오. 파일 경로는 너무 길거나 파일 이름에는 특수 문자가 있습니다. 짧은 경로를 사용하고 특수 문자를 피하십시오. PS 자체 문제 : PS 설치 프로그램을 다시 설치하거나 수리하십시오.

부팅 할 때 "로드"에 PS가 붙어있는 여러 가지 이유로 인해 발생할 수 있습니다. 손상되거나 충돌하는 플러그인을 비활성화합니다. 손상된 구성 파일을 삭제하거나 바꾸십시오. 불충분 한 메모리를 피하기 위해 불필요한 프로그램을 닫거나 메모리를 업그레이드하십시오. 하드 드라이브 독서 속도를 높이기 위해 솔리드 스테이트 드라이브로 업그레이드하십시오. 손상된 시스템 파일 또는 설치 패키지 문제를 복구하기 위해 PS를 다시 설치합니다. 시작 오류 로그 분석의 시작 과정에서 오류 정보를 봅니다.

"로드"는 PS에서 파일을 열 때 말더듬이 발생합니다. 그 이유에는 너무 크거나 손상된 파일, 메모리 불충분, 하드 디스크 속도가 느리게, 그래픽 카드 드라이버 문제, PS 버전 또는 플러그인 충돌이 포함될 수 있습니다. 솔루션은 다음과 같습니다. 파일 크기 및 무결성 확인, 메모리 증가, 하드 디스크 업그레이드, 그래픽 카드 드라이버 업데이트, 의심스러운 플러그인 제거 또는 비활성화 및 PS를 다시 설치하십시오. 이 문제는 PS 성능 설정을 점차적으로 확인하고 잘 활용하고 우수한 파일 관리 습관을 개발함으로써 효과적으로 해결할 수 있습니다.

이 기사는 MySQL 데이터베이스의 작동을 소개합니다. 먼저 MySQLworkBench 또는 명령 줄 클라이언트와 같은 MySQL 클라이언트를 설치해야합니다. 1. MySQL-Uroot-P 명령을 사용하여 서버에 연결하고 루트 계정 암호로 로그인하십시오. 2. CreateABase를 사용하여 데이터베이스를 작성하고 데이터베이스를 선택하십시오. 3. CreateTable을 사용하여 테이블을 만들고 필드 및 데이터 유형을 정의하십시오. 4. InsertInto를 사용하여 데이터를 삽입하고 데이터를 쿼리하고 업데이트를 통해 데이터를 업데이트하고 DELETE를 통해 데이터를 삭제하십시오. 이러한 단계를 마스터하고 일반적인 문제를 처리하는 법을 배우고 데이터베이스 성능을 최적화하면 MySQL을 효율적으로 사용할 수 있습니다.

깃털 통제의 열쇠는 점진적인 성격을 이해하는 것입니다. PS 자체는 그라디언트 곡선을 직접 제어하는 옵션을 제공하지 않지만 여러 깃털, 일치하는 마스크 및 미세 선택으로 반경 및 구배 소프트를 유연하게 조정하여 자연스럽게 전이 효과를 달성 할 수 있습니다.

PS 카드의로드 인터페이스는 소프트웨어 자체 (파일 손상 또는 플러그인 충돌), 시스템 환경 (DIFE 드라이버 또는 시스템 파일 손상) 또는 하드웨어 (하드 디스크 손상 또는 메모리 스틱 고장)로 인해 발생할 수 있습니다. 먼저 컴퓨터 자원이 충분한 지 확인하고 배경 프로그램을 닫고 메모리 및 CPU 리소스를 릴리스하십시오. PS 설치를 수정하거나 플러그인의 호환성 문제를 확인하십시오. PS 버전을 업데이트하거나 폴백합니다. 그래픽 카드 드라이버를 확인하고 업데이트하고 시스템 파일 확인을 실행하십시오. 위의 문제를 해결하면 하드 디스크 감지 및 메모리 테스트를 시도 할 수 있습니다.

MySQL 성능 최적화는 설치 구성, 인덱싱 및 쿼리 최적화, 모니터링 및 튜닝의 세 가지 측면에서 시작해야합니다. 1. 설치 후 innodb_buffer_pool_size 매개 변수와 같은 서버 구성에 따라 my.cnf 파일을 조정해야합니다. 2. 과도한 인덱스를 피하기 위해 적절한 색인을 작성하고 Execution 명령을 사용하여 실행 계획을 분석하는 것과 같은 쿼리 문을 최적화합니다. 3. MySQL의 자체 모니터링 도구 (showprocesslist, showstatus)를 사용하여 데이터베이스 건강을 모니터링하고 정기적으로 백업 및 데이터베이스를 구성하십시오. 이러한 단계를 지속적으로 최적화함으로써 MySQL 데이터베이스의 성능을 향상시킬 수 있습니다.

PS 페더 링은 이미지 가장자리 블러 효과로, 가장자리 영역에서 픽셀의 가중 평균에 의해 달성됩니다. 깃털 반경을 설정하면 흐림 정도를 제어 할 수 있으며 값이 클수록 흐려집니다. 반경을 유연하게 조정하면 이미지와 요구에 따라 효과를 최적화 할 수 있습니다. 예를 들어, 캐릭터 사진을 처리 할 때 더 작은 반경을 사용하여 세부 사항을 유지하고 더 큰 반경을 사용하여 예술을 처리 할 때 흐릿한 느낌을줍니다. 그러나 반경이 너무 커서 가장자리 세부 사항을 쉽게 잃을 수 있으며 너무 작아 효과는 분명하지 않습니다. 깃털 효과는 이미지 해상도의 영향을받으며 이미지 이해 및 효과 파악에 따라 조정해야합니다.
