python成員訪問

2021-06-11 05:02:32 字數 1231 閱讀 1789

import math

class circle:

def __init__(self):

self.radius = 1

def __getattr__(self, item):

if item is 'area':

print 'area called'

return math.pi*self.radius**2

elif item is 'perimeter':

print 'perimeter called'

return math.pi*self.radius*2

circle = circle()

print circle.area

print circle.perimeter

##output:

area called

3.14159265359

perimeter called

6.28318530718

這種情況下area用法雖然是和屬性一樣,但是本質是函式,不會在__dict__裡找到這個名字

python屬性訪問存在優先順序

先利用__getattribute__(name)  訪問@property  => 檢查__dict__裡的key-value  => 呼叫__getattr__()方法

import math

class circle:

def __init__(self,radius):

self.__radius = radius

@property

def radius(self):

return self.__radius

@radius.setter

def radius(self,radius):

self.__radius = radius

circle = circle(1.1)

print circle.radius

circle.radius = 2

print circle.radius

##output:

1.12

通過訪問器訪問屬性,__radius的形式讓此屬性以_classname__radius的名字存在於__dict__

兩種形式都可以控制對物件的修改,對賦值可以加入判斷、不過不知道除了形式上的不同,還有什麼特定的用處!有待理解

資料成員訪問

project100.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include include include using namespace std class fac class myacls public fac int myacls m si...

成員訪問限制

c 中通過訪問限制修飾符來控制對型別和成員的訪問。c 中的訪問修飾符共有5種 public protected internal internal protected和private public修飾符 所屬類的成員以及非所屬類的成員都可以訪問。protected internal修飾符 訪問限制是...

C private成員的訪問

標籤 c private class by 小威威 我們先來看一段 include using namespace std class box box int x3,int x4 box const int box box add box box private int x2 int main vo...