python的全局变量(属性的用法),私有属性,计算对象引用数

python的属性可以实现C#的全局变量的功能

#encoding=utf-8
class Student:
	def __init__(self,name,age):
		self.name=name;
		self.age=age;
		self.hobby=[] #这里属性用一个列表表示,用来添加爱好
		print('creat a student')
	def __str__(self):#跟init方法一样,自动调用
		return ('%s的年龄是%d,爱好是%s'%(self.name,self.age,str(self.hobby)))#这里加个str一定打印的是字符串
	def sayHello():
		print('hello world')
	def addAge(self,addedAge):
		
		print("%s age is %d"%(self.name,self.age))
	def addAgeAgain(self,addedAge):
		self.age+=addedAge;
		print("%s age is %d"%(self.name,self.age))
	def addHabby(self,habby):
		self.hobby.append(habby)	
#这样是按照上面addAge()进行计算的,得出的age没有发生变化,是不对的
#tom age is 9
#tom age is 9



tom=Student('tom',9) #creat a student
tom.addAge(1)#长大了1岁
tom.addAge(2)#长大了两岁
print(tom) #当没有__str__时,异常,定义了__str__ 返回:tom的年龄是9
 #1 创建一个对象2 python自动的调用__init__方法,把对象自动引用 3 放回创建对象的引用给tom
tim=Student('tim',9)
tim.addAgeAgain(1)
tim.addAgeAgain(2)
tim.addHabby("run")
tim.addHabby('football')
print(tim) #tim的年龄是12,爱好是['run', 'football']
#显示 tim age is 10
#tim age is 12
#tim的年龄是12



把一个对象添加到另一个对象的属性中去

#encoding=utf-8
#对象之间的引用
class Student():
	def __init__(self,name,age):
		self.name=name
		self.age=age

		print("hello")
	def setAge(self,age):
		if(age>10):
			return self.age

	def getName(self):#通过这个隐藏属性,可以对属性进行限定
		return self.name
	def getAge(self):#公有方法
		return self.age
	def __test(self):
		print("这是一个私有方法")
	def __del__(self):
		print("当对象被删除的时候执行") #比如stu,stud都指向对象,指向对象的两个都被删除后,才会执行这个del
	def test(self,value):
		if(value>0):
			self.__test()#这里可以调用私有方法


class book(object):
	"""docstring for book"""
	def __init__(self, book_name):
		self.name=book_name

stu=Student('kemi',9)
stu.test(8)
import sys #引入模块
num=sys.getrefcount(stu)#返回对象的引入数
print(num) #2 getrefcount中有个对象指向它
stud=stu  #stu 和stud都指向一个对象
print(sys.getrefcount(stu)) #3
del stu #并没有将这个student('kemi',9)删掉
#stu.__test():#这样调用时错误的,不可以调用私有方法
#隐藏属性  
del stud #有这句话,则运行后立刻进行删除对象,__del__,因为没有别的对象指向它
#若没有这句话,则运行后等到整个程序结束,内存被回收,执行__del__
##因为如果在程序结束时,有些对象还存在,那么python解释器会自动调用它的__del__方法来完成清理工作

类的继承:

#encoding=utf-8
class Animal:
	def __init__(self):
		self.num=100
		self._name=200
	def eat(self):
		print("Can eat something")
	def __test(self):
		print("Have a test")
	def testDog(self):
 		self.__test( )  #继承私有方法,这里的test()里面不能加self
 		print(self._name)
class Dog(Animal):#这里表示继承Animal
	def bark(self):
		print("The dog can bark")
class HuangDog(Dog):#继承可以是多层继承
	def bark(self):#这个方法先在自己类中查找方法,找不到在再去父类中寻找
 		print("the HuangDog can bark")
 		#第一种调用被重写的父类的方法
 		Dog.bark(self)#调用父类的方法,self必须要用
 		#第二种 
 		super().bark()
 		'''
 	def testDog(self):
 		self.__test()  #继承私有方法不可以实现
 		print(self._name)
 		'''
	def Color(self):
		print("the color of the huangdog is yellow")

dog=Dog()
dog.eat()
hd=HuangDog()
hd.eat()
hd.bark()
dog.testDog()
#私有方法和 私有属性不会被继承




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一枚努力的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值