python3 class寫法 新式類 經典類

2021-10-11 19:22:41 字數 1754 閱讀 9021

[經典類與新式類](

[python2和python3中新式類、經典類(舊式類)的區別](

[python新式類與經典類的區別](

經典類:不由任意內建型別派生出的類

新式類:由任意內建型別派生出的類(只要乙個內建型別位於類樹的某個位置)

python2.1:只有經典類

python2.2:引入新式類

python3:取消經典類,預設繼承`object`

# >= python 2.2

class person(object):pass # 新式類寫法

class person():pass # 經典類寫法

class person:pass # 經典類寫法

# python3.*:

class person(object):pass# 推薦

class person():pass

class person:pass

區別#### 1. 如果經典類被作為父類,子類呼叫父類的建構函式時會出錯

#基類(經典類)

class person:

def __init__(self):

print "hi, i am a person. "

#子類class student(person):

def __init__(self):

super(self.__class__, self).__init__()

if __name__ == "__main__":

student = student()

#出錯啦!typeerror: must be type, not classobj

新式類作為父類就可以:

#基類(新式類)

class person(object):

def __init__(self):

print "hi, i am a person."

#子類class student(person):

def __init__(self):

super(self.__class__, self).__init__()

if __name__ == "__main__":

student = student()

#### 2. mro繼承順序的區別(見後續章節)

#### 3. 類例項型別的區別

經典類中:所有類都是`'classobj'`,所有的例項都是`'instance'`,不利於不同例項的對比/判斷。

# 經典類:

# python2.7.5

class a(): pass

class b(): pass

a = a()

b = b()

print(type(a))#

print(type(b))#

print(type(a))#

print(type(b))#

print(type(a) == type(b))# true

# 新式類:

# python2.7.5

class a(object): pass

class b(object): pass

a = a()

b = b()

print(type(a))#

print(type(b))#

print(type(a))#

print(type(b))#

print(type(a) == type(b))# false

python3 class類 練習題

一 定義乙個學生student類。有下面的類屬性 1 姓名 name 2 年齡 age 3 成績 score 語文,數學,英語 每課成績的型別為整數 類方法 1 獲取學生的姓名 get name 返回型別 str 2 獲取學生的年齡 get age 返回型別 int 3 返回3門科目中最高的分數。g...

python2 和 python3相容寫法

一 使用importerror,python3中將一些python2的模組名稱做了修改,需要我們做一些處理來保證 在不同python版本中能夠正常執行 coding utf 8 try python3 from configparser import configparser except impo...

python3 新式郵件寫法 附件亂碼 解決

import sys import re import mimetypes import base64 import traceback from pathlib import purepath from datetime import date from calendar import month...