python 类

类:一大类对象共有的通用行为

类中的函数称为方法

__init__是一个特殊的方法 ,以self为前缀的变量可供类中的所有方法使用。

class Dog:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def sit(self):
        ...
    def roll_over(self):
        ...
通过实例访问的变量称为属性:name,age
my_dog=Dog('dasd',5)
访问属性:my_dog.name;my_dog.age
访问方法:my_dog.sit();my_dog.roll_over()

给属性指定默认值,有些属性无需形参来定义,可在方法__init__()中来指定默认值,如

class Car:
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0

修改属性的值:

直接修改如

my_car=Car('dfd','fdf',686)
my_car.odometer_reading=23

再设立一个函数,如

def update_odometer(self,mileage):
    self.odometer_reading=mileage
my_car=Car('fdsf','sfsdf',42)
my_car.update_odometer(23)

通过方法对属性的值进行递增


继承:子类继承父类时,将自动获得另一个类的所有属性和方法,并可以定义自己的属性和方法,创建子类时,父类必须在当前文件中,且位于子类前面

编写子类时,要调用父类的方法__init__(),这是将初始化在父类的__init__()方法中定义的所有属性,从而让子类包含这些属性

class Car:
    def __init__():
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0
    def 
    def
    def
class ElectricCar(Car):
    def __init__(self,make,model,year):
        super.__init__(make,model,year)
        self.battery_size=75
    def describe_battery(self):
        ...
super()时特殊函数,让你能够调用父类的方法
给子类定义属性和方法,如self.battery_size=75;def describe_battery(self):

 对于父类的方法,不符合子类,是可以重写的

假如父类里有fill_gas_tank()的方法,但是他对点电动车毫无意义,就可以重写他

class ElectricCar(Car):
    def fill_gas_tank(self):
        print("fdfdfdddgfbfbf")
class Car:
    def __init__(self,make,model,year):
        ...
    def get_describe_name(self):
        ...

class Battery:
    def __init__(self,battery_size):
        self.battery_size=battery_size
    def describe_battery(self):
        print("vdfvd")

class ElectricCar:
    def __init__(self,make,model,year):
    super().__init__(make,model,year)
    self.battery=Battery()
my_tesla=ElectricCar('dfsf','fsdfs',24)
print(my_tesla.get_describe_name())
my_tesla.battery.describe_battery()#这是在my_tesla中查找属性battery,并对存储在该属性中的Battery实例调用方法describe_battery()



 导入类

在cay.py中有一个Car类,导入时from car import Car

一个模块导入多个类,from car import Car,ElectricCar

导入整个模块import car

导入模块所有类from module_name import *

可以用as做别名


 

搜索路径

当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

  • 1、当前目录
  • 2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
  • 3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。


PYTHONPATH 变量

作为环境变量,PYTHONPATH 由装在一个列表里的许多目录组成。PYTHONPATH 的语法和 shell 变量 PATH 的一样。

在 Windows 系统,典型的 PYTHONPATH 如下:

set PYTHONPATH=c:\python27\lib;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C中调用Python的方法有多种方式。一种常见的方法是使用pybind11库。pybind11是一个C++库,可以在C++和Python之间进行无缝转换。它提供了一种简单的方式来将C++绑定到Python,并且可以在C++中调用Python的方法。通过使用pybind11,您可以在C++中创建一个Python模块,将C++导出为Python,并在C++中调用Python的方法。 另一种方法是使用Python的C API。您可以使用Python的C API在C中调用Python的方法。首先,您需要使用PyImport_ImportModule函数导入Python模块,然后使用PyObject_GetAttrString函数获取Python的引用。接下来,您可以使用PyObject_CallMethod函数调用Python的方法。 这是一个使用Python的C API在C中调用Python的示例代码: ```c++ #include <Python.h> int main() { // 初始化Python接口 Py_Initialize(); // 导入Python模块 PyObject* pModule = PyImport_ImportModule("module_name"); if (pModule == NULL) { // 模块导入失败 return 1; } // 获取Python的引用 PyObject* pClass = PyObject_GetAttrString(pModule, "class_name"); if (pClass == NULL || !PyCallable_Check(pClass)) { // 引用获取失败或者不可调用 return 1; } // 创建的实例 PyObject* pInstance = PyObject_CallObject(pClass, NULL); if (pInstance == NULL) { // 实例创建失败 return 1; } // 调用的方法 PyObject_CallMethod(pInstance, "method_name", NULL); // 释放资源 Py_DECREF(pInstance); Py_DECREF(pClass); Py_DECREF(pModule); // 结束Python接口初始化 Py_Finalize(); return 0; } ``` 请注意,上述代码中的"module_name"是要导入的Python模块的名称,"class_name"是要调用的Python的名称,"method_name"是要调用的Python的方法的名称。您需要根据实际情况进行相应的更改。 总结起来,您可以使用pybind11库或Python的C API在C中调用Python的方法。这些方法可以让您在C和Python之间进行无缝的交互,并实现代码的扩展和功能的增强。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值