您的位置:首页 > 编程语言 > Python开发

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

2017-07-10 18:09 603 查看
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()
#私有方法和 私有属性不会被继承
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: