[python 笔记4]类(面向对象?)

  1、定义

   

__metaclass__=type
class Person:
	def __init__(self,name,age):
		self.name=name
		self.age=age
	def setName(self,name):
		self.name=name
	def getName(self):
		return self.name
	def setAge(self,age):
		self.age=age
	def getAge(self):
		return self.age
p1=Person('C++','22')
print p1.getName()
p1.setName('Python')
print p1.getName()
print p1.name

__init__()为构造函数

其中__metaclass__=type确定使用新式类,python3.0以后就不用考虑新式类的问题,类的定义:

class Person(object):
	def __init__(self,name,age):
		self.name=name
		self.age=age
	def setName(self,name):
		self.name=name
	def getName(self):
		return self.name
	def setAge(self,age):
		self.age=age
	def getAge(self):
		return self.age
p1=Person('C++','22')
print p1.getName()
p1.setName('Python')
print p1.getName()
print p1.name

显然在类的定义中每一个函数参数列表的第一个都应该是self,self也就是对象本身,而self也是区分方法和对象函数的标志。

2、访问权限

通过上面的案例,可以发现对象的属性也是可以在外部进行访问的。

PS:熟悉c++的同学都知道,将对象的属性暴露在外面是非常危险的。

python 中并没有private关键字,而是使用双下划线”__”来完成属性的私有化,当然不只是属性,类中的方法也是使用同样的方法

class Person(object):
	def __init__(self,name,age):
		self.__name=name
		self.__age=age
	def setName(self,name):
		self.__name=name
	def getName(self):
		return self.__name
	def setAge(self,age):
		self.__age=age
	def getAge(self):
		return self.__age
p1=Person('C++','22')
print p1.getName()
p1.setName('Python')
print p1.getName()
print p1.__name

我们可以发现使用类中的方法可以继续访问对象的属性,在类外访问是失败的。

但是python中并没有什么特殊机制,而是将有双下划线的属性前面加上单下划线和类名,

例如:__name->_Person__name

class Person(object):
	def __init__(self,name,age):
		self.__name=name
		self.__age=age
	def setName(self,name):
		self.__name=name
	def getName(self):
		return self.__name
	def setAge(self,age):
		self.__age=age
	def getAge(self):
		return self.__age
p1=Person('C++','22')
print p1.getName()
p1.setName('Python')
print p1.getName()
print p1._Person__name


如果这样还是可以继续访问的。

3、继承

  继承不多介绍,就像上面的例子,在类名后面的括号内的类都是该类的父类,当有多个类为父类时,使用’,’间隔。子类继承父类,构造函数使用super(函数,构造父类继承来的属性方法等。

class Person(object):
	def __init__(self,name,age):
		self.__name=name
		self.__age=age
	def setName(self,name):
		self.__name=name
	def getName(self):
		return self.__name
	def setAge(self,age):
		self.__age=age
	def getAge(self):
		return self.__age

class ITer(Person):
	def __init__(self,name,age,lan):
		super(ITer,self).__init__(name,age)
		self.lan=lan
	def getLan(self):
		return self.lan
	def setLan(self,lan):
		self.lan=lan
		
p2=ITer('Sun',22,'python')
print p2.getLan()
print p2.getName()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值