C语言学习网

如何在Python中使用自定义类

发表于:2022-10-04 作者:安全数据网编辑
编辑最后更新 2022年10月04日,今天就跟大家聊聊有关如何在Python中使用自定义类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/

今天就跟大家聊聊有关如何在Python中使用自定义类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Python的优点有哪些

1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严格;2、Python属于开源的,所有人都可以看到源代码,并且可以被移植在许多平台上使用;3、Python面向对象,能够支持面向过程编程,也支持面向对象编程;4、Python是一种解释性语言,Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序;5、Python功能强大,拥有的模块众多,基本能够实现所有的常见功能。

抽象方法

class Person():  def say(self):    passclass Student(Person):  def say(self):    print("i am student")

抽象类: 包含抽象方法的类

  • 抽象类可以包含非抽象方法

  • 抽象类可以有方法和属性

  • 抽象类不能进行实例化

  • 必须继承才能使用,且继承的子类必须实现所有抽象方法

import abcclass Person(metaclass=abc.ABCMeta):  @abc.abstractmethod  def say(self):    passclass Student(Person):  def say(self):    print("i am student")s = Student()s.say()

补充:函数名和当做变量使用

class Student():  passdef say(self):  print("i am say")s = Student()s.say=says.say(9)

组装类

from types import MethodTypeclass Student():  passdef say(self):  print("i am say")s = Student()s.say=MethodType(say,Student)s.say()

元类

# 类名一般为MetaClass结尾class StudentMetaClass(type):  def __new__(cls, *args, **kwargs):    print("元类")    return type.__new__(cls, *args, **kwargs)class Teacher(object, metaclass=StudentMetaClass):  passt = Teacher()print(t.__dict__)

附:python 抽象类、抽象方法的实现示例

由于python 没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库,具体方式如下

from abc import ABCMeta, abstractmethod#抽象类class Headers(object):  __metaclass__ = ABCMeta  def __init__(self):    self.headers = ''  @abstractmethod  def _getBaiduHeaders(self):pass  def __str__(self):    return str(self.headers)  def __repr__(self):    return repr(self.headers)#实现类class BaiduHeaders(Headers):  def __init__(self, url, username, password):    self.url = url    self.headers = self._getBaiduHeaders(username, password)  def _getBaiduHeaders(self, username, password):    client = GLOBAL_SUDS_CLIENT.Client(self.url)    headers = client.factory.create('ns0:AuthHeader')    headers.username = username    headers.password = password    headers.token = _baidu_headers['token']    return headers

如果子类不实现父类的_getBaiduHeaders方法,则抛出TypeError: Can't instantiate abstract class BaiduHeaders with abstract methods 异常

看完上述内容,你们对如何在Python中使用自定义类有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0