1. 程式人生 > >python運算子過載

python運算子過載

剛剛學習python,對於運算子過載,也不是很懂,個人理解如下:

類的專有方法(未截完):

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

表示python建立的類中有這麼多的方法,這些方法是類預定義的,在類的例項進行一些操作時,會呼叫相關的方法。

class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
# def __str__(self):
    #     return "r is {0}, i is {1}".format(self.r, self.i)
x = Complex(2.0, -4.4)
print(x)
Complex類在沒有過載__str__(self)方法時

輸出如下

<__main__.Complex object at 0x011A8410>   即地址

class Complex
: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart def __str__(self): return "r is {0}, i is {1}".format(self.r, self.i) x = Complex(2.0, -4.4) print(x)

在Complex類過載__str__(self)方法後

輸出如下

r is 2.0, i is -4.4

在這裡類似Java中的重寫toString()方法。

如果想對例項進行+,- 等運算子操作

class Complex:
def __init__
(self, realpart, imagpart): self.r = realpart self.i = imagpart # def __add__(self, other): # return self.i + self.r + other; x = Complex(2.0, -4.4) print(x + 2)
沒有過載__add__()方法時:報錯了(錯誤是不支援操作型別+)

Traceback (most recent call last):
  File "F:/pycharm/workspace/test21.py", line 9, in <module>
    print(x + 2)
TypeError: unsupported operand type(s) for +: 'Complex' and 'int'

在過載__add__()方法後

class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
def __add__(self, other):
return self.i + self.r + other;

x = Complex(2.0, -4.4)
print(x + 2)

正常輸出(精度異常)

-0.40000000000000036

相關推薦

Python——運算子過載(2)

繼續介紹運算子過載的知識。 ======================================================================== 屬性引用:__getattr__和__setattr__ __getattr__方法是攔截屬性點號

Python——運算子過載(1)

運算子過載 關鍵概念: 1.運算子過載讓類攔截常規的Python運算。 2.類可過載所有的Python表示式運算子。 3.類也可過載列印、函式呼叫、屬性點號運算等內建運算。 4.過載使類例項的行為像內建型別。 5.過載是通過特殊名稱的類方法來實現的。 運算子過載只是意味著在

Python 運算子過載

常見的運算子過載方法 方法 過載 呼叫 __init__ 建構函式 物件建立: X = Class(args) __del__ 解構函式 X物件收回 __add__ 運算子+ 如果沒有_i

python運算子過載

剛剛學習python,對於運算子過載,也不是很懂,個人理解如下: 類的專有方法(未截完): ------------------------------------------------------------------------------------------

Python ==運算子過載

在Python中is、==是兩個運算子,對物件進行比較,分別對ID,TYPE,Value進行比較。 "is"比較ID,TYPE,Value三維,而"=="僅比較value。 實驗發現其實is,==僅僅是比較一些簡單的基礎變數。 class Test(object):

PythonPython運算子過載(簡版)

__add__(self, other): + __sub__(self, other): - __mul__(self, other): * __matmul__(self, other): @ __truediv__(self, other): / __floordiv_

Python 看書的一些記錄 運算子過載

1.類和模組有什麼關係?   (1)類是模組的一部分,是模組物件的屬性。   (2)類和模組都是名稱空間,但是類是對於語法的。模組是對於檔案的   (3)類支援多個例項,但是模組被匯入時只有一個。 2.什麼是抽象超類(抽象基類)?   抽象超類就是指類的部分行為需要由其子類提供 class

(D20)Python-異常高階,運算子過載

異常(高階) 異常相關的語句: try-except try-finally raise 觸發異常,發生錯誤通知 assert 根據條件觸發AssertionError型別的錯誤通知 with 語句 with語句 語法:

python day18 異常(高階) 一元運算子過載 、 關係運算符的過載

目錄: 異常(高階) 一元運算子過載 、 關係運算符的過載 、 with語句 語法: with 表示式1 [as 變數名1], 表示式2 [as 變數名2], ... 作用: 用於對資源訪問的場合,確保使用過程中不管是否發生

python學習筆記22(運算子過載

運算子過載 不同型別的物件之間的運算子會有不同的解釋,如: print(1 + 2) print("1" + "2") #不同的型別用加法會有不同的解釋 利用運算子過載實現兩個字串數字相加 class Person(object): def __init__(sel

Python運算子過載 __iter__()和 __next__()

   Python語言提供了運算子過載功能,增強了語言的靈活性,這一點與C++有點類似又有些不同。鑑於它的特殊性,今天就來討論一下Python運算子過載。       Python語言本身提供了很多魔法方法,它的運算子過載就是通過重寫這些Python內建魔法方法實現的。

Python一一運算子過載

基礎知識       運算子過載讓類攔截常規的Python運算。       類可過載所有Python表示式運算子。       類也可以過載列印、函式呼叫、屬性點號運算等內建運算。       過載使類例項的行為像內建型別。       過載是通過提供特殊名稱的類

C++運算子過載詳細解說及程式碼編寫

一、不能過載的運算子:   (1) "."(類成員訪問運算子)   (2)" .*"(類成員指標訪問運算子)   (3) "::"(域運算子)   (4)"sizeof"(長度運算子)   (5) " ?:"(條件運算子)

kotlin運算子過載

//運算子過載定義 //任意類可以定義或者過載父類的基本運算子 //通過運算子的具名函式定義 // //過載運輸符 方法名稱 引數個數要對應 引數型別和返回值可以隨意定義 class Complex(var real:Double,var imaginary:Double){

python - 運算子

#-*- coding:utf-8 -*-# author:jiaxy# datetime:2018/11/3 10:47# software: PyCharm Community Edition# 運算子# 1. 算術運算子# 加減乘除 + - * /# 取模/取餘 % 常用場景:判斷奇偶數a = 1

Python3底層函式重寫和運算子過載

底層函式重寫                   Python是支援重寫底層函式的,在列印物件時,               &n

(轉)為什麼operator運算子過載一定要為友元函式呢

如果是過載雙目操作符(即為類的成員函式),就只要設定一個引數作為右側運算量,而左側運算量就是物件本身 而 >> 或<< 左側運算量是 cin或cout 而不是物件本身,所以不滿足後面一點,就只能申明為友元函數了 如果一定要宣告為成員函式,只能成為如下的形式:

C++類和物件.四個預設成員函式(賦值運算子過載

1.(1)類的定義   類就是具有相同資料和相同操作的一組物件的集合。 學生類定義: class student {//成員變數char* name;int age;int sex;//成員函式void speak(){cout<<name<<"年

運算子過載和友元函式

運算子過載的意義是:將常見的運算子重載出其他的含義:比如將*重載出指標的含義,將<<與cout聯合使用重載出輸出的含義,但需要認識到的問題是:運算子的過載:本質仍然是成員函式,即你可以認為:發生運算子過載時,實際上,是呼叫了成員函式,只不過重新換了個名字,叫運算子過載。 友元函式的意義:使得我們

C++ 運算子過載 運算子屬於左邊的

class A { public: int a; A operator+(const A &a) { A res; res.a = this->a+a.a; return res; } }; int main() { A a1,a2; a1.a = 1;