类 : 具有相同的属性和方法的对象的集合 .它定义了该集合中每个对象所共有的属性和方法。
对象: 万物皆对象.
类和对象的关系 : 类是对象的模板; 对象是类的实例.
语法:
class 类名: 里面包含 属性 和 方法
class Preson: # Preson 是类名 可以随意定义
def eat(self):
# " def "为定义方法
# " eat "函数名-->方法名 可以随意定义
# " ( ) "形参列表 形参: 形式列表
# " self " 第一个参数 默认是当前对象的引用 = 地址指向 可以随意修改
print('人在吃饭...')
def sleep(self):
print('睡觉就行时...')
if '__main__'.__eq__(__name__): #代表程序主入口 是从这里进去的(不写也可以)
zhangshan=Preson() #创建对象(直接用这个)
zhangshan.eat() #调用对象
zhangshan.sleep() #调用对象
#打印结果为: 人在吃饭...
# 睡觉就行时...
很多类都倾向于将对象创建为有初始状态的。
因此类可能会定义一个名为 __init__( ) 特殊方法(构造
方法)
先生成对象,调用此方法,再将对象赋值给引用名
# __init__() 无参 的方法
class Preson:
def __init__(self):
self.name='无名氏' #这的进行赋值 可生成多个
def eat(self):
print(self.name+'人在吃饭...')
def sleep(self):
print(self.name+'睡觉就行时...')
Pre=Preson() #必需先实例化类 然后进行调用
Pre.eat()
Pre.sleep()
#打印为: 无名氏人在吃饭...
# 无名氏睡觉就行时...
Pre=Preson()
Pre.name='张珊' #也可以在和进行赋值 如果同时赋值 这里具有优先权 执行这
Pre.eat()
Pre.sleep()
# 打印为: 张珊人在吃饭...
# 张珊睡觉就行时...
建议使用下面这种方法(只是建议,因人而异,不强制)
# __init__() 有参 的方法
class Preson:
def __init__(self,name,age):
# self.name 创建一个属性叫name 并且把形参name 赋值给了name
self.name=name
self.age=age
def eat(self):
print(self.name+'人在吃饭...')
def Hello(self):
print('大家好,我叫'+self.name,'今年',self.age,'岁')
Pre=Preson('张三',18) #直接在这进行赋值
Pre.eat()
Pre.Hello()
#打印为 张三人在吃饭...
# 大家好,我叫张三 今年 18 岁
重写的方法: __str__()
class Preson:
def __init__(self,name,age):
self.name=name
self.age=age
def eat(self):
print(self.name+'人在吃饭...')
def Hello(self):
print('大家好,我叫'+self.name,'今年',self.age,'岁')
def __str__(self): #如果在输入这行代码 返回的就 不在是 地址和引用
# object 所有数据类型的基类 父类
return 'name:' + self.name + 'age :' + str(self.age) #返回的是这个
Pre=Preson('张三',18)
# 如果不输入所述 代码 则打印 地址和对象的引用
print(Pre)
print(str(Pre))
print(Pre.__str__())
#打印都为 <__main__.Preson object at 0x054D0750>
# 如输入上面所述代码 返回的皆是 name:张三age :18
解释型语言,不需要预定义,在使用前直接声明就可以(随时创建,随时使用):
class Preson:
def eat(self):
print(self.name+'人在吃饭...')
def Hello(self):
print('大家好,我叫'+self.name,'今年',self.age,'岁')
Pre = Preson()
Pre.name='李四' #注意代码是从头开始执行 所以需要写前面
Pre.age=19
Pre.eat()
Pre.Hello()
#打印为: 李四人在吃饭...
# 大家好,我叫李四 今年 19 岁
python的语法特点,没有绝对,一切靠自觉,见名知意
公有方法 :允许外部调用的方法
私有方法 : 不允许外部调用的方法 只能在当前类中使用 ,以__开头__结尾 想调也可以调到
自动销毁方法: __del__( )
当对象没有引用的时候,或程序结束的时候,程序自动调用__del__().
class Preson:
def eat(self):
print(self.name+'人在吃饭...')
def Hello(self):
print('大家好,我叫'+self.name,'今年',self.age,'岁')
def __del__(self): #这是一种办法 在这输入代码
print('对象被删除...')
Pre = Preson()
Pre.name='李四'
Pre.age=19
Pre.eat()
Pre.Hello()
del Pre #也可以直接在末尾写
#最后打印出来 李四人在吃饭...
# 大家好,我叫李四 今年 19 岁
# 对象被删除...
可以测试一个对象有多少个引用: 在顶部写import sys 末尾写sys.getrefcount( ) 返回 从 2 开始
import sys #在顶部写import 后面接 sys
class Preson:
def eat(self):
print(self.name+'人在吃饭...')
def Hello(self):
print('大家好,我叫'+self.name,'今年',self.age,'岁')
Pre = Preson()
Pre.name='李四'
Pre.age=19
Pre.eat()
Pre.Hello()
lisi=Pre
print(sys.getrefcount(Pre)) #打印为3 要是没有引用则默认是2
python:命名规则:
变量命名:数字 、字母 " _ "(下划线)
注 :首字母不能是数字
非硬性要求:(规范) 建议
1.习惯性: 下划线加 _name
2.驼峰式写法 : 例: MyClass
3.第一个单词首字母小写其余的单词首字母大写
不要去用关键字