Python学习(一):对象和类
可变对象和不可变对象
当将一个可变对象传给函数时,函数可能会改变这个对象的内容。
Python中的数字和字符串都是不可变对象,它们的内容不可以被改变。
1 from Circle import Circle 2 3 def main(): 4 # Create a Circle object with radius 1 5 myCircle = Circle() 6 7 # Print areas for radius 1, 2, 3, 4, and 5. 8 n = 5 9 printAreas(myCircle, n) 10 11 # Display myCircle.radius and times 12 print("\nRadius is", myCircle.radius) 13 print("n is", n) 14 15 # Print a table of areas for radius 16 def printAreas(c, times): 17 print("Radius \t\tArea") 18 while times >= 1: 19 print(c.radius, "\t\t", c.getArea()) 20 c.radius = c.radius + 1 21 times -= 1 22 23 main() # Call the main function
运行结果:
Radius Area 1 3.141592653589793 2 12.566370614359172 3 28.274333882308138 4 50.26548245743669 5 78.53981633974483 Radius is 6 n is 5
当你将一个对象传递给函数,就是将这个对象的引用传递给函数。但是传递不可变对象和可变对象之间还有更重要的区别:
(1)像数字或字符串这样的不可变对象参数,函数外的对象的原始值并没有改变
(2)像圆这样的可变对象参数,如果对象的内容在函数内被改变,则对象的原始值改变
在第20行,Circle对象c的redius属性增加1。c.redius+1创建了一个新的int对象,并将它赋值给c.redius。myCircle和c都指向同一个对象。当printAreas函数完成后,c.redius是6。所以,由第12行可以看出,myCircle.redius的输出结果为6。在第21行,times-1创建了一个新的int对象,并赋值给times。在函数printAreas之外,n还是5。所以,在第13行n的输出还是5。
隐藏数据域
在Python中,私有数据域是以两个下划线开始来定义的,你也可以用两个下划线开始来定义私有方法。
私有数据域和方法可以在类内部被访问,但他们不能在类外被访问,为了让客户端可以访问数据域,就要提供一个get方法返回它的值。
为了使数据域可以被更改,就要提供一个set方法去设置一个新值
通俗的讲,get方法是指获取器(或访问器),set方法是指设置器(或修改器)
1.一个get方法有如下方法头
1 def getPropertyName(self):
2.如果返回类型是布尔型,那么习惯上get方法被定义为
1 def isPropertyName(self):
3.一个set方法有如下方法头
1 def setPropertyName(self, propertyValue):
4.例如:
1 #ex1.py
2 import math
3 class Circle:
4 def __init__(self, radius = 1):
5 self.__radius = radius
6
7 def getRadius(self):
8 return self.__radius
9
10 def getPerimeter(self):
11 return 2 * self.__radius * math.pi
12
13 def getArea(self):
14 return self.__radius * self.__radius * math.pi
1 from ex1 import Circle
2
3
4 def main():
5 c = Circle(5)
6 # c.__radius # 出现错误:AttributeError: 'Circle' object has no attribute '__radius'
7 print(c.getRadius()) # 输出结果为:5
8
9
10 main()
注意:使用两个下划线开头来命名私有数据域和方法,但不要以一个以上的下划线结尾。在Python中,以两个下划线开头同时以两个下划线结尾的名字具有特殊含义