鍍金池/ 問(wèn)答/Java  Python  HTML/ Python創(chuàng)建類的時(shí)候,加()和不加有什么區(qū)別、聯(lián)系?

Python創(chuàng)建類的時(shí)候,加()和不加有什么區(qū)別、聯(lián)系?

在Python中定義類class的時(shí)候,可以加上():

class Employee():
    """這里是Employee的__doc__"""
    empCount = 0
    __name1 = 'safety'
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1
    
    def display_count(self):
        print('Totall employee count:{}'.format(Employee.empCount))
    
    def display_employee(self):
        print('Name:{},  Salary:{}'.format(self.name, self.salary))

也可以不加上():

class Employee:
    """這里是Employee的__doc__"""
    empCount = 0
    __name1 = 'safety'
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1
    
    def display_count(self):
        print('Totall employee count:{}'.format(Employee.empCount))
    
    def display_employee(self):
        print('Name:{},  Salary:{}'.format(self.name, self.salary))

目前我觀察的結(jié)果是:二者沒(méi)有區(qū)別;實(shí)際上它們有無(wú)區(qū)別呢?如果真的沒(méi)有區(qū)別,那么哪種寫(xiě)法是正確的?我在《Python基礎(chǔ)教程》中看到的是不加括號(hào)。

回答
編輯回答
凹凸曼

不加括號(hào)的,或者加括號(hào)未繼承其他類的是經(jīng)典類(舊式類) ,加括號(hào)繼承其他類或者Object的是新式類

python3中都是新式類

2018年7月1日 09:35
編輯回答
司令

不需要繼承類的話,可加可不加

2017年7月4日 21:25
編輯回答
擱淺

事實(shí)上是沒(méi)有區(qū)別的,以下三種寫(xiě)法是等價(jià)的

class A:
    pass
    
class A():
    pass
    
class A(object):
    pass
2017年12月18日 17:11
編輯回答
落殤

可以不寫(xiě)吧,這個(gè)的區(qū)別并不是很大,主要是帶括號(hào)的這個(gè)類很有可能會(huì)用來(lái)作為繼承的操作,所以會(huì)加上,但是普通情況下是沒(méi)有區(qū)別的
以下是在有括號(hào)而沒(méi)有繼承的情況下IDE的提示:

clipboard.png

可以看到?jīng)]有繼承的情況下類上寫(xiě)了括號(hào)會(huì)被IDE當(dāng)做多余的符號(hào)......

2017年1月16日 11:44
編輯回答
尐潴豬

在《流暢的python》中第一章第3頁(yè)有一個(gè)類是這樣的:

class FrenchDeck:
    ranks = ...

然后,在第 6 頁(yè)的頁(yè)腳有這樣的一個(gè)注釋:

在 Python2 中,對(duì) object 的繼承需要顯式地寫(xiě)為 FrenchDeck(object);而在 Python 3 中,這個(gè)繼承關(guān)系是默認(rèn)的。
2018年4月25日 20:17