python学习——类和对象(一)

类,类实例,__init__方法,self,私有变量


一.类和对象
1、以Student类为例,在Python中,定义类如下:

class Student(object):
    pass

(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承的类。

2、实例:
定义好了类,就可以通过Student类创建出Student的实例,创建实例是通过类名+()实现:

student = Student()

3、__init__方法
由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Student类时,把name、score等属性绑上去:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

这里注意:
(1)有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:

>>>student = Student("Hugh", 99)
>>>student.name
"Hugh"
>>>student.score
99

self总结
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定是用self
self总是指调用时的类的实例。

4、普通函数与在类中定义函数区别
只有一点不同,就是第一参数永远是类的本身实例变量self,并且调用时,不用传递该参数。除此之外,类的方法(函数)和普通函数没啥区别

5、私有变量

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:

class Student(object):

def __init__(self, name, score):
    self.__name = name
    self.__score = score
def print_score(self):
    print "%s: %s" %(self.__name,self.__score)

改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了:

>>> student = Student('Hugh', 99)
>>> student.__name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'

6.但是如果外部代码要获取name和score怎么办?
可以给Student类增加get_name和get_score这样的方法:

class Student(object):
。。。。
	def get_name(self):
    	return self.__name

    def get_score(self):
        return self.__score

7.如果又要允许外部代码修改score怎么办?
可以给Student类增加set_score方法:

class Student(object):
    ...
    def set_score(self, score):
        self.__score = score

8.变量命名需要注意的
在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。

有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

发布了43 篇原创文章 · 获赞 46 · 访问量 4521

猜你喜欢

转载自blog.csdn.net/S_123789/article/details/89055632
今日推荐