类方法里面可以调用其它类方法
类方法里面可以调用类变量
对象方法里面可以调用类变量
对象方法里面可以调用类方法
对象方法里面可以调用其它对象变量
对象方法里面可以调用其它对象方法
静态方法里面不能调用类变量和类方法,也不能调用对象方法和对象变量
私有方法需要用对象方法调用
构造函数里面不带self.的变量只能在构造函数内使用
构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作
python中的类和对象
类:具有相同的属性和方法的对象集合
举例:张三、李四属于人类的对象
共同属性:1个头、2只手、2只脚
共同方法:睡觉、吃饭、花钱
举例:笔记本电脑、台式电脑属于电脑类的对象
共同的属性:显示器、都有开机键
共同的方法:都可以上网
对象:某一个类真实存在的实例
实例化:根据类创建对象的过程称之为实例化
类和对象:类方法、实例方法、类变量、实例变量
类变量:定义在类里面、函数外
装饰器:在不改变函数功能的基础上添加新的功能
class People(object): #定义一个People类、object是基类、父类、超类
def __init__(self,name): #构造函数(作用:根据类创建对象时做初始化的) 实例化时会自动调用构造函数
self.name = name #实例变量
header = 1 #定义一个类变量
'定义一个类方法(需要使用到装饰器@classmethod)'
@classmethod #装饰器
def test(cls):
print('会睡觉')
'定义一个实例方法'
def func1(self): #self代表对象本身
print('会砍柴')
'定义一个实例方法'
def func2(self):
print('会拉煤')
def func3(self):
print('{}去北京砍柴'.format(self.name))
p1 = People('张三') #根据People类生成一个p1对象
# p2 = People() #根据People类生成一个p2对象
'对象可以调用实例方法'
# p1.func1()
# p2.func2()
'类不能调用实例方法'
# People.func1()
'对象可以调用类变量'
# print(p1.header) #运行结果为:1
'类调用类变量'
# print(People.header) #运行结果为:1
'对象可以调用实例变量'
# print(p1.name) #运行结果为:张三
'类不能调用实例变量'
# print(People.name)
# p1.func3() #运行结果为:张三去北京砍柴
'''
备注:
1、类变量和类方法是公有的,类和对象都可以调用
2、实例变量和实例方法是私有的,只有对象可以调用
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//
class Num():
a = 1 #类变量
def __init__(self,i):
self.i = i #实例变量
'定义类方法'
@classmethod
def func1(cls):
return 8
@classmethod
def func2(cls):
value = cls.func1() #类方法可以调用其他类方法
print(value)
def func3(self):
print('多测师')
'定义一个实例方法'
def func3(self):
# print(self.a+1) #对象方法可以调用类变量
# print('这是一个实例方法')
value = self.func1() #对象方法可以调用其他对象方法
print(value)
'定义一个静态方法'
@staticmethod
def func4(): #静态方法不可以调用类的变量和方法,也不可以调用对象的变
量和方法
print('这是一个静态方法')
'''
备注:
1、静态方法是类里面的一个普通方法,既不是实例方法也不是类方法
2、定义静态方法需要使用到装饰器@staticmethod
3、静态方法没有cls或self修饰
4、静态方法里面既不可以引用类变量和实例变量也不可以调用类方法和实例方
法
'''
n = Num(1)
n.func3() #2 #多测师
/
'''
备注:
1、类变量和类方法是公有的,类和对象都可以调用
2、实例变量和实例方法是私有的,只有对象可以调用
'''
print(id(People))
p = People
print(id(p))
'''
备注:实例化时类不加括号相当于赋值,所以打印p和People的id指定的是同一内
存地址
2223720310792
2223720310792
'''
print(id(People))
p = People
print(id(p))
'''
备注:实例化时类必须加括号,才称之为创建对象,对象和类指向的是不同的内存
地址
2513161119928
2513167783808
'''
2513161119928
2513167783808
'封装一个读取文件中所有内容的公共方法'
# def get_file_value(file):
# f = open(file,'r')
# value = f.read()
# print(value)
# 封装一个读取文件的公共方法(默认读取所有,读取任意行数)
'二次封装'
def get_file_value(file,star_index=None,end_index=None):
f = open(file,'r')
value = f.readlines()
for i in value[star_index:end_index]:
print(i)
'封装一个读取文件中所有内容的公共方法'
def get_file_value(file):
f = open(file,'r')
value = f.read()
print(value)
# 封装一个读取文件的公共方法(默认读取所有,读取任意行数)
def func(file,x=None,y=None):
f=open(file,'r')
if x==None or y==None:
print(f.read())
else:
print(f.readlines()[x:y])
func(r'C:\Users\Administrator\Desktop\test.txt',1,4)
# class Phone():
# '定义一个私有方法'
# def __call100(self):
# print('正在打电话')
#
# def func1(self,money):
# if money > 0:
# self.__call100()
# else:
# print('您的余额不足,请充值后在拨打电话')
#
# '''
# 封装:
# 1、将属性或方法设为私有的
# 2、私有属性或方法外部无法直接调用
# '''
# p = Phone()
# p.func1(1) #运行结果为:正在打电话
# p.func1(0) #运行结果为:您的余额不足,请充值后在拨打电话
class People():
name = '小七'
__age = '18'
__phone = '18389581559'
def get_age(self,user):
if user == '陈':
return self.__age
else:
return '滚犊子'
def get_phone(self,user):
if user == '周':
return self.__phone
else:
return '想都别想'
# print(People.name) #运行结果为:小七
print(People().get_age('陈')) #运行结果为:18
print(People().get_phone('周')) #运行结果为:18389581559
///
'python中类的继承'
class Grand_Father():
def __init__(self,n):
pass
def dcs1(self):
print('爱下棋')
def dcs2(self):
print('爱喝茶')
class Father(Grand_Father):
# def __init__(self,user):
# pass
def func1(self):
print('爱抽烟')
def func2(self):
print('爱看美女')
def func3(self):
print('爱打麻将')
class Son(Father): #Son类继承Father类
# def __init__(self,name):
# pass
def func4(self):
print('爱学习')
def func5(self):
print('爱敲python')
s = Son()
s.func1() #运行结果为:爱抽烟
s.func4() #运行结果为:爱学习
'''
1、子类继承父类后可调用父类的所有方法
2、子类继承父类后,父类无法调用子类的方法
3、当子类和父类同时拥有构造函数函数时,默认使用子类自己的构造函数
4、当子类没有构造函数时,父类拥有构造函数,子类默认继承父类的构造函数
5、当子类同时继承多个父类时,优先使用自己的构造函数,如果子类没有构造函
数则继承父类的构造函数
6、当子类同时继承多个父类时,优先继承第一个父类的构造函数,如果第一个父
类没有构造函数,则继承第二个父类
7、子类同时继承多个父类时,可以调用多个父类的方法
8、当父类继承其他类时,子类可以调用父类和父类继承的类方法
'''