Python面向对象编程-类和实例、访问限制

1.类和实例

import requests
import types

#类和实例

#面向对象最重要的概念就是类(Class)和实例(Instance)
#必须牢记类是抽象的模板,比如Student类,
#而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同

#定义类是通过class关键字:

class Student(object):
    pass

#class后面紧接着是类名,即Student,类名通常是大写开头的单词

#(object),表示该类是从哪个类继承下来的,这是所有类最终都会继承的类。

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

student = Student()
print(student)

#可以自由地给一个实例变量绑定属性,比如,给实例student绑定一个name属性:
student.name = 'zhoujian'
print(student.name)

print('--------------------------1')


#通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:

#注意到__init__方法的第一个参数永远是self,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
class Student(object):

    def __init__(self,name,score):
        self.name = name
        self.score = score


student = Student('周建','90')
print(student.name)
print(student.score)

def print_message(student):

    print('%s:%s' % (student.name,student.score))


print_message(student)

print('--------------------------2')

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_message(self):
        print('%s: %s' % (self.name, self.score))



student = Student('zhoujian','50')

student.print_message()

print('--------------------------3')

结果:

/Users/zhoujian/PycharmProjects/Demo/bin/python /Users/zhoujian/Python/Demo/oop.py
<__main__.Student object at 0x103c9b550>
zhoujian
--------------------------1
周建
90
周建:90
--------------------------2
zhoujian: 50
--------------------------3


2.访问限制

#访问限制

#Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据

#如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__
#在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))

bart = Student('Bart Simpson', 59)
#改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了:

#bart.__name
#print(bart.__name)


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



class Student(object):

    def __init__(self,name,score):
        self.__name = name
        self.__score = score

    def get_name(self):
        return self.__name

    def set_name(self,name):
        self.__name = name

    def get_score(self):
        return self.__score

    def set_score(self, score):
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))


student = Student('zhoujian',60)


student.get_name()
student.get_score()


print(student.get_name())
print(student.get_score())


student.set_name('周杰伦')
student.set_score(90)

student.print_score()


print('--------------------------4')


结果:

zhoujian
60
周杰伦: 90
--------------------------4

你可能感兴趣的:(Python学习)