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...