Python类
2018-07-25 13:12:30来源:博客园 阅读 ()
类
一、类的定义
class 类名 ():#括号里是写父类,默认是object
#属性
#方法
类名首字母一般大写
#给一个对象添加属性的方法:
对象名.新的属性名 = 值
#获得目标对象的属性:
1.对象.属性
2.定义一个方法,这个方法中,使用 self.属性
二、类的内建属性
__init__ #初始化函数,在__new__之后
__new__ #创建实例时,生成实例属性
__class__ #实例所在的类
__str__ #print(类实例)时触发
__del__ #删除实例
#__init__方法,当创建完一个对象后,立马会自动调用:
def __init__(self):
print('hahaha')
#demo:
class Cat():
#定义方法
#__init__定义默认属性,
#__init__方法不需要调用,创建完对象后,立马自动调用
def __init__(self,newColor,newWeight):
self.color = newColor
self.weight = newWeight
#newColor,newWeight,是局部变量,不是对象的属性
#如果要在__init__方法中添加属性,就要用 self.属性名 的方法
def eat(self):
print('------吃------')
def drink(self):
print('------喝------')
def sleep(self):
print('------睡------')
def printInfo(self):
print(self.color)
print(self.weight)
dahuang = Cat('花色',5)
dahuang.eat()
dahuang.drink()
dahuang.sleep()
#定义了默认属性,可以直接调用
dahaung.printInfo()
#给对象赋予属性
dahuang.color = '黑色'
dahuang.weight = 8
三、类的继承:
#demo
class Cat(object):
def run(self):
print('---------跑-------')
class Bosi(Cat):
pass
bosi = Bosi()
bosi.run()
四、类方法与静态方法:
#demo1
class Cat(object):
#类属性
num = 0
#实例方法
def __init__(self):
#实例属性
self.age = 1
#如果类属性的名字和实例属性的名字相同
#那么通过对象访问的时候,会优先获取实例属性
#self.num = 100
def run(self):
print('--------跑------')
#类方法
@classmethod
def setNum(cls,newNum):
cls.num = newNum
#静态方法
@staticmethod
def printTest():
print('验证Test类')
mao = Cat()
#用对象取访问类属性是可以的
print(mao.num)
#常用的方式是用类去访问类属性
print(Cat.num)
#通过类方法修改类属性
#mao.setNum(200)也可以
Cat.setNum(300)
print(Cat.num)
#调用静态方法
Cat.printTest()
#无法通过类名访问实例属性或实例方法
#如:print(Cat.age)会报错
#demo2:
#设置与调用私有属性时的property作用:
class Test():
def __init__(self):
self.__num = 100
#第一种方式
def getNum(self):
return self.__num
def setNum(self,num):
self.__num = num
num = property(getNum,setNum)#括号里的get,set顺序不能变
'''
另一种方式:
@property
def num(self):
return self.__num
@num.setter
def num(self,num):
self.__num = num
'''
t = Test()
t.num = 200#相当于调用t.setNum(200)
print(t.num)#相当于调用t.getNum()
#demo3:
#动态添加类方法:
import types
class Test(object):
def __init__(self,name):
self.name = name
#添加实例方法:
def run(self):
print('running')
t1 = Test('小明')
t1.run = types.MethodType(run,t1)#(功能名,对象名)
#表示把对象与该方法连接起来
t1.run()
#添加静态方法:
@staticmethod
def sleep():
print('sleeping')
Test.sleep = sleep
Test.sleep()
#添加类方法:
@classmethod
def eat(cls):
print('eating')
Test.eat = eat
Test.eat()
#完成创建一个对象
#当对象执行的时候,先调用__new__方法完成创建对象,
#然后调用__init__方法,完成初始化
def __new__(cls):
pass
return super().__new__(cls)
#限制类属性的方法:
__slots__ = ('name''age')#只能添加限定的属性,添加其他属性会报错
五、单例实现:
#demo
class Single(object):
#控制返回同一个对象
__instance = None
#控制只初始化一次,__init__定义时用if语句判断,使其只执行一次
#通过__flag= False实现
def __new__(cls):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
a = Single()
b = Single()
print(a)
print(b)
六、元类:
#类实质上也是一个对象,由元类创建
type('类名',(父类),{属性,方法})
#demo
def printNum(self):
print('num = %d'% self.num)
Test = type('Test',(),{'printNum':printNum})
#上面的定义方式等价于
class Test():
def printNum(self):
print('num = %d'% self.num)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash