学习python的第四天(类,继承)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了学习python的第四天(类,继承),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5116字,纯文字阅读大概需要8分钟。
内容图文
![学习python的第四天(类,继承)](/upload/InfoBanner/zyjiaocheng/719/1fef9f7063a146baa3e8840659976fd8.jpg)
每日小酌:这世界上,最富有的人,是跌倒最多的人;最勇敢的人,是每次跌倒都能站起来的人;最成功的人,是那些每次跌倒,不单能站起来,还能够坚持走下去的人。
开始学习
类
定义类关键字 class
init 是一个特殊的方法用于在创建对象时进行初始化操作不用的时候可写可不写
拿例题说事1
class tyler(object):
# 类还可以不写object(默认就继承了object)创建 class tyler:
def __init__ (self,name,age):
self.name = name
self.age = age
def study(self,course):
self.course = course
print('%s正在学习%s。'%(self.name,self.course))
def watch(self):
if self.age <18:
print('%s只能看《熊出没》'%self.name)
else:
print('%s只能看《动作片》'%self.name)
if __name__ == "__main__":
stu = tyler('asd',19) #这里的()走的是初始化__init__函数,此函数有两个参数,所以要赋值
stu.watch() # 调用类中的函数
这里也可以用main()函数调用
def main():
#创建学生对象并指定姓名和年龄
stu1 = tyler('琉璃', 38)
# 给对象发study消息
stu1.study('Pytho')
# 给对象发watch_av消息
stu1.watch()
stu2 = tyler('玻璃门', 15)
stu2.study('看书')
stu2.watch()
if __name__ == '__main__':
main()
拿例题说事2
class student:
# 当你的类有一些公用变量的时候,你就可以初始化。
def __init__(self,name):
# 再类中,一切的变量和函数都要印记(self)
self.name = name
def def1(self,num):
self.num = num
print(self.num)
print(self.name)
def def2(self):
print(self.name)
print(self.num)
if __name__ == "__main__":
stu = student('李四') #()走的是初始化函数
stu.def1(100)
stu.def2()
练习
读取TXT文件,并输出里面的大写字母有多少个
class tyler(object):
def __init__(self):
self.count = 0
pass
def reada(self):
with open ('C:/Users\\a\\Desktop\\ds.txt',mode='r') as f:
lines = f.read()
for line in lines:
new_line = line.strip('\n')
# print(new_line,end="")
for i in new_line:
if i.isupper():
self.count +=1
print('大写字母个数为%d'%self.count)
if __name__ == "__main__":
T = tyler()
T.reada()
访问可见性的问题
在类中可以调用变量,函数,在函数中也可调用函数
私有变量,变量名前加‘__’
如果非要使用私有变量,那么可以使用dir(class())去查看他的真正名称
私有变量或函数,在类内部可以直接调用
如果你想体现一个变量或函数,可以使用‘_’
拿题说事
class test:
def __init__(self,foo):
self.__foo = foo #私有变量
def __bar(self):
print(self.__foo)
print('__bar')
if __name__ == "__main__":
ts = test("hello") #AttributeError: 'test' object has no attribute '__bar'
ts._test__bar() #用私有的全名称来调用
@porperty装饰器
#将函数变成了一个属性 修改器和访问器的函数名要相同
#如果想要访问私有属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作
这时就可以考虑使用@property包装器来包装getter和setter方法
#说白了就是通过装饰器可以将私有的变量修改
class person (object):
def __init__(self,name,age):
self._name = name
self._age = age
#访问器 - getter方法
@property
def name(self):
return self._name
#访问器 - getter方法
@property
def age (self):
return self._age
#修改器-- setter方法
@age.setter
def age(self,age):
self._age = age
def play(self):
if self._age <16:
print('%s正在玩游戏'%self._name)
else:
print('%s正在看书'%self._name)
if __name__ == "__main__":
per = person('张三',45)
per.play()
per.age = 10 #可修改私有变量
per.play()
slots ,魔法
如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。
class person (object):
#限定person对象只能绑定_name,_age,_gender属性
__slots__ = ('_name','_age','_gender')
def __init__(self,name,age):
self._name = name
self._age = age
@property
def name(self,name):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self,age):
self._age = age
def play(self):
if self._age <16:
print('%s正在玩飞行棋.' % self._name)
else:
print('%s正在玩斗地主.' % self._name)
if __name__ == "__main__":
per = person('王二麻子',23)
per.play()
per._gender = '男'
静态方法和类方法
#用@staticmethod
from math import sqrt
class calss_a(object):
def __init__(self, a, b, c):
self._a = a
self._b = b
self._c = c
@staticmethod
def is_valid(a, b, c):
return a + b > c and b + c > a and a + c > b
def perimeter(self):
return self._a + self._b + self._c
def area(self):
half = self.perimeter() / 2
return sqrt(half * (half - self._a) *
(half - self._b) * (half - self._c)
def main():
a, b, c = 3, 4, 5
# 静态方法和类方法都是通过给类发消息来调用的
if calss_a.is_valid(a, b, c):
t = calss_a(a, b, c)
print(t.perimeter())
# 也可以通过给类发消息来调用对象方法但是要传入接收消息的对象作为参数
# print(Triangle.perimeter(t))
print(t.area())
# print(Triangle.area(t))
else:
print('无法构成三角形.')
if __name__ == '__main__':
main()
继承
子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力
class person (object):
def __init__(self, name, age):
self.name = name
self.age = age
def play(self):
print('%s正在愉快的玩耍.' % self.name)
def watch(self):
if self.age >= 18:
print('%s正在观看爱情动作片.' % self.name)
else:
print('%s只能观看《熊出没》.' % self.name)
class student(person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self._grade = grade
@property
def grade(self):
return self._grade
@grade.setter
def grade(self, grade):
self._grade = grade
def study(self, course):
print('%s的%s正在学习%s.' % (self._grade, self.name, course))
if __name__ == "__main__":
stu = student('大牛',15,'大三')
stu.study('数学')
内容总结
以上是互联网集市为您收集整理的学习python的第四天(类,继承)全部内容,希望文章能够帮你解决学习python的第四天(类,继承)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。