python_Class

简单的说,类是对象的蓝图和模板,而对象是类的实例。这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。

在python中定义一个类代码如下所示:
class Student(object):
def init(self,name,age):
self.name = name
self.age = age
def study(self,course_name):
print(’%s is studing %s’%(self.name,course_name))
def watch_movie(self):
if self.age < 18:
print(’%s 只能看《熊出没》’%self.name)
else:
print(’%s 可以看爱情电影’%self.name)
#init(注意左右各两条下划线)是一个特殊方法用于在创建对象时进行初始化操作
#通过这个方法我们可以为学生对象绑定name和age两个属性
完整的对象的定义和使用代码如下所示:
class Student(object):
def init(self,name,age):
self.name = name
self.age = age
def study(self,course_name):
print(’%s is studing %s’%(self.name,course_name))
def watch_movie(self):
if self.age < 18:
print(’%s 只能看《熊出没》’%self.name)
else:
print(’%s 可以看成人电影’%self.name)

def main():
stu1 = Student(‘小张’,38)
stu1.study(‘Pyhon程序设计’)
stu1.watch_movie()

if name == ‘main’:
main()
运行结果如下图所示:

在win10环境下安装python3.7,右键.py文件->Edit with IDLE,就可以编译了
访问可见性问题

对于上面的代码,有C++、Java、C#等编程经验的程序员可能会问,我们给Student对象绑定的name和age属性到底具有怎样的访问权限(也称为可见性)。因为在很多面向对象编程语言中,我们通常会将对象的属性设置为私有的(private)或受保护的(protected),简单的说就是不允许外界访问,而对象的方法通常都是公开的(public),因为公开的方法就是对象能够接受的消息。在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头,下面的代码可以验证这一点。
class Test:
def init(self, foo):
self.__foo = foo
def __bar(self):
print(self.__foo)
print(’__bar’)

def main():
test = Test(‘hello’)
# AttributeError: ‘Test’ object has no attribute ‘__bar’
test.__bar()
# AttributeError: ‘Test’ object has no attribute ‘__foo’
print(test.__foo)

if name == “main”:
main()
但是,Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来“妨碍”对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,下面的代码就可以验证这一点。之所以这样设定,可以用这样一句名言加以解释,就是“We are all consenting adults here”。因为绝大多数程序员都认为开放比封闭要好,而且程序员要自己为自己的行为负责。
class Test:
def init(self, foo):
self.__foo = foo
def __bar(self):
print(self.__foo)
print(’__bar’)

def main():
test = Test(‘hello’)
test._Test__bar()
print(test._Test__foo)

if name == “main”:
main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yhwang-hub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值