python类继承、对self理解、静态方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python类继承、对self理解、静态方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3631字,纯文字阅读大概需要6分钟。
内容图文
![python类继承、对self理解、静态方法](/upload/InfoBanner/zyjiaocheng/710/3eecb6fddde74d4d9d792da613428384.jpg)
1.继承
在面向对象的语言,继承是一个面向对象编程语言的特征,当我们需要一个新的类,与已经定义的类差别不大,我们可以直接继承的方法,定义一个子类,来提高效率,同时也不需要修改已经定义的类,继承可以不修改父类的情况下,添加新的功能,子类继承父类,子类就拥有父类的属性和方法,当然私有属性不会继承。子类也称为派生类,在不同语言中,继承又可以分为单继承和多继承,比如说,oc和swift是单继承。
单继承
class Animal(object):
#初始化
def __init__(self,name,color):
self.name = name
self.color = color
def __del__(self):
print('对象销毁----')
# 子类
class Dog(Animal):
def printIF(self):
print(self.color)
print(self.name)
wangcai=Dog('wangcai','white')
wangcai.printIF()
上面的Animal这个类中,Dog这个类并没有init这个初始化方法,通继承得到init这个初始化方法;
如果子类可以通过继承的方式访问父类的私有属性,
如果在子类中,自己定义的方法是不能访问父类的私有属性的。
class Animal(object):
#初始化
def __init__(self,name,color):
self._name = name
self.color = color
def __del__(self):
print('对象销毁----')
def test1(self):
print(self._name)
# 子类
class Dog(Animal):
def printIF(self):
print(self.color)
print(self.name)
wangcai=Dog('wangcai','white')
wangcai.printIF()
wangcai.test1()
如果一个方法前面有两个下划线,就是一个私有的方法。只能在类中重新定义的方法,在这个方法调用这个私有方法。
重写父类的方法
所谓重写就是在子类中,有一个和父类相同的方法。子类的方法会覆盖父类的方法。
class Animal(object):
#初始化
def bar(self):
print('啊啊----')
# 子类
class Cat(Animal):
#在子类中重写编写父类的方法就叫重写
def bar(self):
#调用父类方法
Animal.bar()
print('喵喵---')
TomCat = Cat()
TomCat.bar()
多继承
其实PYTHON是支持多继承的,多继承是一个类可以有多个父类,当子类调用方法,子类中没有会先去自己的方法中去找,如果没有就从父类优先继承的那个类中,在从父类的兄弟类中找,如果没有在往上一级父类中去找该方法。下图代码可以演示这个问题。
class Base(object):
def test(self):
print('-------BASE------')
class A(Base):
def test(self):
print('-------A------')
class B(Base):
def test(self):
print('-------B------')
class C(A,B):
def a(self):
print('addd')
c = C()
c.test()
2.对self的理解
Self是类方法特有的一个参数,普通函数是没有的。定义类方法时,必须有一个额外的参数,并且他必须是第一个参数,它就是self。要注意的是,调用类方法时,并不需要给这个参数赋值,Python会提供这个值。这个特别的参数指对象本身,按照惯例它的名称是self,你也可以定义成其它名字,但是最好还是使用约定俗成的self。下例中将self改为myname一样没有错误。
class?Person:?
??????????def?__init__?(myname,name):
??????????????? myname.name=name
??????????def?sayhi?(myname):?
???????????????????print?'hi,nice?to?meet?you!
p=Person()?p.sayhi()?
输出:hi,nice?to?meet?you!?
注意:self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。
3.静态方法
静态方法,其实就是我们学过的函数,和函数唯一的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。
静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定,也正是因为如此,此方法中无法调用任何类和对象的属性和方法,静态方法其实和类的关系不大。
静态方法需要使用@staticmethod修饰,例如:
class Bird:
# staticmethod修饰的方法是静态方法
@staticmethod
def info (p):
print('静态方法info: ', p)
静态方法的调用,既可以使用类名,也可以使用类对象,例如:
#类名直接调用静态方法
Bird.info("类名")
#类对象调用静态方法
b = Bird()
b.info("类对象")
运行结果为:
静态方法info: 类名
静态方法info: 类对象
在使用 Python 编程时,一般不需要使用类方法或静态方法,程序完全可以使用函数来代替类方法或静态方法。但是在特殊的场景(比如使用工厂模式)下,类方法或静态方法也是不错的选择。至于静态方法和类方法的具体应用场景,后续章节用到时再做详细介绍。
内容总结
以上是互联网集市为您收集整理的python类继承、对self理解、静态方法全部内容,希望文章能够帮你解决python类继承、对self理解、静态方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。