首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python3 与 C# 面向对象之~封装

Python3 与 C# 面向对象之~封装

原创
作者头像
逸鹏
修改于 2018-06-20 13:09:33
修改于 2018-06-20 13:09:33
1.7K02
代码可运行
举报
文章被收录于专栏:逸鹏说道逸鹏说道
运行总次数:2
代码可运行

原文:https://www.cnblogs.com/dotnetcrazy/p/9202988.html

在线编程https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.lesschina.com/python/base/oop/1.封装.html

这次尽量用故事模式来讲知识,上次刚说美化,这次算是第一篇了。步入正题:

1.定义一个类

类的组成:类名、属性(没有字段)、方法

1.1创建一个类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 类名首字母大写class Student(object):    """创建一个学生类"""    # 没有属性定义,直接使用即可    # 定义一个方法,方法里面必须有self(相当于C#的this)    def show(self):        print("name:%s age:%d"%(self.name,self.age))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 实例化一个张三zhangsan=Student()# 给name,age属性赋值zhangsan.name="张三"zhangsan.age=22# 调用show方法zhangsan.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name:张三 age:22
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 打印一下类和类的实例print(Student)print(zhangsan) #张三实例的内存地址:0x7fb6e8502d30
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<class '__main__.Student'><__main__.Student object at 0x7fe961195b70>

和静态语言不同,Python允许对实例变量绑定任何数据 ==> 对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称可能都不同

说的比较抽象,举个例子就明了了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xiaoming=Student("小明",22)xiaoming.mmd="mmd"print(xiaoming.mmd)# 小明和小潘都是Student类,但是小明有的mmd属性,小潘却没有xiaopan=Student("小潘",22)print(xiaopan.mmd)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-4-500940527165> in <module>()----> 1 xiaoming=Student("小明",22)      2 xiaoming.mmd="mmd"      3 print(xiaoming.mmd)      4       5 # 小明和小潘都是Student类,但是小明有的mmd属性,小潘却没有TypeError: object() takes no parameters

1.2使用__init__初始化赋值

创建对象后,python解释器默认调用_init_方法,对必要字段进行初始化赋值

需要注意的是:__init__并不是C#中的构造函数,__new__ (后面会说) + __init__ 等价于构造函数

第一个参数和类的其他方法一样,都是self(相当于C#里面的this,表示创建的实例本身)调用的时候直接忽略它

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student(object):    # 初始化赋值    def __init__(self,name,age):        self.name=name        self.age=age    def show(self):        print("name:%s age:%d"%(self.name,self.age))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 有了__init__方法,在创建实例的时候,就不能传入空的参数了lisi=Student()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-6-1ba88e24910b> in <module>()      1 # 有了__init__方法,在创建实例的时候,就不能传入空的参数了----> 2 lisi=Student()TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个正确的实例xiaowang=Student("小王",22)xiaowang.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name:小王 age:22

1.3使用魔法方法_str_

在print(类名)的时候自定义输出

这个有点像C#类里面重写ToString,eg:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public override string ToString(){    return "Name:" + this.Name + " Age:" + this.Age;}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Python的__str__()方法class Student(object):    def __init__(self, name, age):        self.name = name        self.age = age    # self别忘记写了,return也别忘了    def __str__(self):        return "姓名:%s,年龄:%s" % (self.name, self.age)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lisi = Student("李四", 22)print(lisi) #现在打印就是你DIV的输出了
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
姓名:李四,年龄:22

1.4 私有属性、方法

C#、Java里面都是有访问修饰符的,Python呢?

Python规定,如果以双下划线__开头的属性或者方法就是私有的

变量名类似_xxx_的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量。特殊变量是可以直接访问的,不是private变量

在说私有属性前,我们来个案例说说属性不私有的弊端,eg:

小明同学学了点C#,然后学习了上面的知识,心想 ~ Python这么搞安全性呢?不行,我得构造构造,于是有了下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student(object):    def __init__(self, name, age):        self.name = name        self.age = age    def get_name(self):        return self.name    def set_name(self, name):        self.name = name    def get_age(self):        return self.age    def set_age(self, age):        if age > 0:            self.age = age        else:            print("age must > 0")    def show(self):        print("name:%s,age:%d" % (self.name, self.age))

小明心想,想要修改age属性,你通过set_age我就可以判断了哇,还是本宝宝聪明

这时候小潘过来了,淡淡的一笑,看我怎么破了你 ~ 看代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zhangsan = Student("张三", -20)zhangsan.show()  # name:张三,age:-20zhangsan.age = -1  # set_age方法形同虚设,我完全可以直接访问字段了zhangsan.show()  # name:张三,age:-1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name:张三,age:-20name:张三,age:-1

小潘傲气的说道~大叔,给你脸呢。我就是不去访问你设定的方法怎么滴呢?

小明急的啊,赶紧去找伟哥求经。不一会,傲气的贴出自己的New Code,心想着我私有属性都用上了还怕个毛毛:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student(object):    def __init__(self, name, age):        self.__name = name        # 一般需要用到的属性都直接放在__init__里面了        # self.__age = age        self.set_age(age)    def get_name(self):        return self.__name    def set_name(self, name):        self.__name = name    def get_age(self):        return self.__age    def set_age(self, age):        if age > 0:            self.__age = age        else:            print("age must > 0")    def show(self):        print("name:%s,age:%s" % (self.__name, self.__age))

小潘冷笑道~呵呵,然后使用了上次的绝招:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zhangsan = Student("张三", -20)zhangsan.__age = -1  # 同样的代码,只是属性前面加了下划线zhangsan.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
age must > 0---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-13-82c41ff46846> in <module>()      1 zhangsan = Student("张三", -20)      2 zhangsan.__age = -1  # 同样的代码,只是属性前面加了下划线----> 3 zhangsan.show()<ipython-input-12-1dec32486a19> in show(self)     22      23     def show(self):---> 24         print("name:%s,age:%s" % (self.__name, self.__age))AttributeError: 'Student' object has no attribute '_Student__age'

这次小潘同志傻眼了,完全不能访问了啊?不行,怎么能被小明大叔笑话呢?

于是上网翻资料,国内不行就国外,外文不好就翻译,终于找到一个新破解方式:

双下划线开头的实例变量不能直接访问,是因为Python解释器对外把_age变量改成了Studentage,所以,仍然可以通过*_Studentage*来访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 搞事情zhangsan._Student__age = -1zhangsan.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name:张三,age:-1

建议你不要这么干,不同版本的Python解释器可能会把__age改成不同的变量名

有些时候,你会看到以一个下划线开头的实例变量名,比如_age这样的实例变量,外部是可以访问的。

但是,请把它视为私有变量,不要随意访问(Python很多东西全凭自觉~捂脸@_@)

小潘终于长叹一口气,然后还不忘取笑小明同学~你这属性搞的,真麻烦,总是通过方法调用,太累了 <_> 鄙视!

这可把小明急的啊,学习的积极性都没有了,吃了碗牛肉面就去伟哥那边好好取经了~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 私有方法一笔带过class Student(object):    """私有方法"""    def __go_home(self):        passzhangsan = Student()zhangsan.__go_home() # 访问不到
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-15-45c76191b808> in <module>()      7       8 zhangsan = Student()----> 9 zhangsan.__go_home() # 访问不到AttributeError: 'Student' object has no attribute '__go_home'

1.5 装饰器,让方法像属性那样便利

Python内置的 @property装饰器就是负责把一个方法变成属性调用的,来个例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student(object):    def __init__(self, name, age):        # 一般需要用到的属性都直接放在__init__里面了        self.name = name        self.age = age    @property    def name(self):        return self.__name    @name.setter    def name(self, name):        self.__name = name    @property    def age(self):        return self.__age    @age.setter    def age(self, age):        if age > 0:            self.__age = age        else:            print("age must > 0")    def show(self):        print("name:%s,age:%s" % (self.name, self.age))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xiaoming = Student("小明", 22)xiaoming.name = "小潘"xiaoming.age = -2xiaoming.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
age must > 0name:小潘,age:22

把一个getter方法变成属性,只需要加上 @property就可以了

@方法名.setter,负责把一个setter方法变成属性赋值

当然了,如果只想读 ==> 就只打上 @property标签

小明同学高兴坏了,赶紧大吃了一顿~


1.6 _del_ and _new_

创建对象后,python解释器默认调用_init_() 方法

当删除一个对象时,python解释器也会默认调用_del_() 方法(有点析构函数的味道)

当有1个变量保存了对象的引用时,此对象的引用计数就会加1

当使用del删除变量指向的对象时,如果对象的引用计数不为1,那么每次删除计数减1,当计数为1的时候再调del就真把对象删了

这个可以结合我之前说过的链接来理解:于链接文件的探讨

看着老师夸夸其谈,小明愣了楞,摸摸肚子想到,真BB,我先搞个例子练练:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义一个临时类class Temp(object):    def __del__(self):        print("你被干掉了")

验证方面用编辑器比较合适,交互模式下可能不是真正的结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 对象被s1和s2引用s1 = Temp()s2 = s1del s1  # 只删除s1,新创建的对象并没有被删除print("-" * 10)

输出:(最后的被干掉是程序退出了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ----------# 你被干掉了

如果用链接来解释就是这样的:

这次两个都删掉:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t1 = Temp()t2 = t1del t1del t2print("-" * 10)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 你被干掉了# ----------

都删了,自然就真删掉了


这样搞比较麻烦,我们引入一下获取引用个数:getrefcount(object也会占1个引用计数)来个案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 程序退出的时候,在他运行期间所有占用资源归还操作系统# 引用计数import syst1 = Temp()print(sys.getrefcount(t1))  #(结果比实际引用大1)【object也会占1个引用计数】t2 = t1print(sys.getrefcount(t1))print(sys.getrefcount(t2))del t1print(sys.getrefcount(t2))# sys.getrefcount(t1)#被删掉自然没有了del t2print("-" * 10)

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2332你被干掉了----------

我再贴一种情况,你可以思考下为啥:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t1 = Temp()t2 = Temp()del t1del t2print("-" * 10)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 你被干掉了# 你被干掉了# ----------

小潘扭过头瞅了一眼说道:“大叔,你_new_忘记写案例了”

小明一愣神,立马反应过来说:“我这叫谋而后动~”

当你实例化一个对象的时候,就会执行new 方法里面的方法。new方法在类定义中不是必须写的,如果没定义,默认会调用object.new去创建一个对象

_new_方法中至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

_new_方法中必须要有返回值(返回实例化出来的实例)

小明翻阅了官方文档,淡定的打下了如下标准格式的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Dog(object):    def __init__(self, name):        self.name = name        print("初始化完毕")    def __str__(self):        return "Dog的名字叫:%s" % self.name    def __new__(cls, name):        # 注意参数,是cls,然后其他参数和init保持一致即可        print("创建对象完毕")        # 别忘记写返回值哦        return object.__new__(cls)def main():    happy = Dog("Happy")    print(happy)if __name__ == '__main__':    main()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
创建对象完毕初始化完毕Dog的名字叫:Happy

关于_name_在模块调用的时候会详细说,你可以先这样理解:如果直接运行py文件就执行,别人调用那么你的main就不执行了

标准写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1.导入的模块# 2.class的定义# 3.其他方法定义def main():    passif __name__ == '__main__':    main()

其他内容后面会继续说,封装部分再说说静态方法类方法之类的就结束了(和C#还是有很大区别的)


1.7 类属性、实例属性

小明问老师:“老师老师,怎么没有静态类,静态属性之类的东西呢?”

老师笑而不语道:“小家伙原来不仅仅是体重增加啊,这求知欲也是大大的增加呢 ~ 且听我慢慢道来”


类在程序里面也是对象(你姑且可以认为所有的类都类似于C#里面的静态类),而通过类实例化的对象,叫实例化对象

实例属性 --> 实例对象相互之间不共享 一般我们都是在 __init__中定义

类属性(类似于C#里面的静态字段) --> 属于类对象,多个实例对象之间共享

注意一下:相同名称的实例属性将屏蔽掉类属性(尽量别同名)

类属性除了可以通过 类名.类属性 访问外,还可以直接 实例对象.类属性 (C#中抽象类和静态类是不能被实例化的)

来个案例更直观点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person(object):    # age为类属性    age = 1    def __init__(self, name):        # name为实例属性        self.name = namedef main():    # 类名.类属性    print(Person.age)    xiaoming = Person("小明")    # 对象.类属性    print(xiaoming.age)if __name__ == '__main__':    main()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
11

如果需要在类外 修改类属性,必须通过类对象去引用然后进行修改

如果通过实例对象去引用会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性

如果通过实例对象去引用该名称的属性,实例属性会强制 屏蔽掉类属性,即引用的是实例属性,除非del了该实例属性才能正常访问类属性

你可以理解为,Python这么做只是为了方便你获取,该怎么修改还得怎么做。来看个案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person(object):    # age为类属性    age = 1    def __init__(self, name):        # name为实例属性        self.name = namedef main():    # 类名.类属性    print(Person.age)    # 通过对象.类属性修改    xiaoming = Person("小明")    xiaoming.age = 100    print(xiaoming.age)  # 其实,并没有修改成功,只是产生了一个同名age    print(Person.age)  # 对吧,类属性并没有被修改    # 通过类名修改    Person.age = 22  # 如果需要在类外修改类属性,必须通过类对象去引用然后进行修改    print(xiaoming.age)  # 刚才已经创建一个同名age,所以现在显示的是刚才的值    print(Person.age)  # 通过类名.类属性 就可以看到值被修改了    # 如果你还是不信,可以创建一个新对象看看    xiaopan = Person("小潘")    print(xiaopan.age)    # xiaoming实例对象想访问怎么办?    # 除非del了该实例属性才能正常访问类属性    del xiaoming.age    print(xiaoming.age)  # 这时候访问的就是 类属性 了if __name__ == '__main__':    main()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
11001100222222

1.8 实例方法、类方法、静态方法

先说说 实例方法,实例方法第一个定义的参数只能是实例本身引用 self,只能通过实例调用(就是我们之前用的 deffunc_name(self,xxx):

类方法:是类对象所拥有的方法,需要用修饰器 @classmethod来标识,第一个参数必须是类对象 cls,可以通过类或者实例直用

静态方法:定义静态方法使用装饰器 @staticmethod,没有默认的必须参数,通过类和实例直接调用

静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过 类对象来引用(访问)

小明眼花缭乱的对老师说道,老师给我看几个案例吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Dog(object):    # 类属性    name = "小汪"    # 实例方法    def __init__(self, age):        # 实例属性        self.age = age        # 打印看看        print("self id:%s" % id(self))    # 类方法    @classmethod    def show_name(cls):        # 访问类属性 cls.xxx        print("我叫%s" % cls.name)        # 打印看看        print("cls id:%s" % id(cls))    # 静态方法    @staticmethod    def say_hello():        print("汪汪汪")def main():    # 类名方式访问    Dog.show_name()    Dog.say_hello()  # 类名的方式可以访问静态方法    # 实例对象方式访问    dog = Dog(2)    dog.show_name()    dog.say_hello()if __name__ == '__main__':    main()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我叫小汪cls id:94310818174200汪汪汪self id:140392216464016我叫小汪cls id:94310818174200汪汪汪

一般都是这样用的(供参考):

实例方法:一般平时用的都是它

类方法:类方法用在模拟C#多个构造函数(Python里面不能有同名函数) or 你需要 对类属性、类方法操作之类的

静态方法:一般 都是独立功能,类似于函数,只不过在面向对象里面一般这么用


1.9 C#封装案例

C#面向对象比较优美,来个封装的案例基本上就搞定了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;namespace _1Encapsulation{    public class Student    {        /// <summary>        /// 字段        /// </summary>        private int _age;        /// <summary>        /// 属性        /// </summary>        public int Age        {            get            {                return _age;            }            set            {                if (value > 1)                {                    _age = value;                }            }        }        /// <summary>        /// 自动化属性        /// </summary>        public string Name { get; set; }        /// <summary>        /// 自动属性必须要有get访问器        /// </summary>        public string SNum { get; }        private int _gender;        public int Gender        {            set            {                _gender = value;            }        }        /// <summary>        /// 构造函数的名字必须与类名一致        /// 构造函数没有返回值也没有viod        /// 默认自动生成一个无参构造函数,当有一个有参构造函数的时候无参构造函数便不会自动创建        /// </summary>        public Student() { }        /// <summary>        /// 有参构造函数        /// </summary>        /// <param name="name"></param>        /// <param name="age"></param>        public Student(string name, int age)        {            this.Name = name;            this.Age = age;        }        /// <summary>        /// this调用当前类的某个有参构造函数        /// </summary>        /// <param name="name"></param>        /// <param name="age"></param>        /// <param name="gender"></param>        public Student(string name, int age, int gender) : this(name, age)        {            this.Gender = gender;        }        /// <summary>        /// 某个方法        /// </summary>        public void Show()        {            Console.WriteLine("Name:" + this.Name + " Age:" + this.Age + "\n");        }        public override string ToString()        {            return "Name:" + this.Name + " Age:" + this.Age;        }    }}

调用部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;namespace _1Encapsulation{    class Program    {        static void Main(string[] args)        {            Student s = new Student() { Name = "mmd", Age = 13, Gender = 1 };            s.Show();            Student s1 = new Student("dmm", 20);            s1.Show();            Console.WriteLine(s);        }    }}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
原来学习Python面相对象编程这么简单
在编程中,有两个特别重要的编程思想,大家应该都听说过,一个种事面向过程变成,另外一种就是今天这篇文章的重点“面向对象编程”。
小白的大数据之旅
2025/07/03
1070
原来学习Python面相对象编程这么简单
python ——面向对象进阶
1.staticmethod和classmethod staticmethod  静态方法: 让类里的方法,直接被类调用,就像正常的函数一样 宝宝,男 博博,女 海娇,男 海燕,女 海东,男 海峰,男 class Student: # f = open('student', encoding='utf-8') def __init__(self): pass @staticmethod def show_student_info(): f
用户1214487
2018/01/23
6410
Python 面向对象学习整理 (看这一篇就足够了)
学完了 Python 基础之后,当我想要把自己的一些小项目通过 Python OOP 的方式来编写的时候,却发现很难很难,于是这次重新回过头来重新学习 Python 中面向对象的思想
Gorit
2021/12/08
9.5K2
Python 面向对象学习整理 (看这一篇就足够了)
Python基础(7)——类
定义类使用class关键字,class 后面紧跟着类名称,类名称通常首字母大写,类名称后面(object)代表当前的类的继承自object类。类主要包含属性和方法
羊羽shine
2019/05/28
3940
Python面向对象之封装(04)
封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外界使用类创建对象然后让对象调用方法,对象方法的的细节都被封装在类的内部。
PM小王
2019/07/02
5650
24. 企业级开发基础5:面向对象特征(封装)
在我们程序开发过程中,定义好类型之后就可以通过类型来创建对象 如:我们定义一个中华人民共和国公民的类型
大牧莫邪
2018/08/27
2770
Python 面向对象编程
二类:由抽象信息或者动作组成的集合,代表一类事物,抽象名词实例(对象):具象的,是一类事物中某一个具体的事物
用户7886150
2020/12/19
4720
Python每天五分钟-面向对象编程之类
面向对象编程简称oop(Object Oriented Programming),是一种程序的设计架构。共有三大特性:封装、继承、多态。五大原则:单一职责原则、开放封闭原则、替换原则、依赖原则、接口分离原则。
用户2475223
2019/12/17
4220
Python3 与 C# 扩展之~基础拓展
看着小张准备回家换衣服了,小明有点失落,又有点孤单,于是说道:“逗逼张,你还要听吗?我准备讲类相关的知识了,这些可是我课后自学的哦~”
逸鹏
2018/07/23
1.5K0
Python3 与 C# 扩展之~基础拓展
Python升级之路( Lv7 ) 面向对象深入
第一章 Python 入门 第二章 Python基本概念 第三章 序列 第四章 控制语句 第五章 函数 第六章 面向对象基础 第七章 面向对象深入
时间静止不是简史
2022/06/15
5300
Python升级之路( Lv7 ) 面向对象深入
Python进阶教程笔记(一)面向对象编程
在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义:
Lemon黄
2020/10/30
4220
Python: 面向对象编程(类和对象)
文章背景: 最近在学习课程Python-Core-50-Courses,其中有个章节是面向对象编程,涉及的内容是类(class)和对象。下面对所学的内容进行相应的整理。
Exploring
2022/09/20
5970
Python 面向对象
# Python 面向对象 # 编程思想 编程届的两大阵营 面向过程 面向对象 区别 实物比较简单,可以用线性的思想去解决 事物比较复杂,使用简单的线性思维无法解决 共同点 面向过程和面向对象都是解决实际问题的一种思维方式 二者相辅相成,并不是对立的,解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间的复杂的关系。方便我们分析整个系统,具体到微观操作,任然使用面向过程方式来处理 # 类与对象 类 类别,分门别类,物以类聚,人类,鸟类,动物类,植物类... 类是多个类似事物组成的群体的
用户9615083
2022/12/25
3790
Python 面向对象
python基础复习:面向对象之继承
__name 表示私有 : 访问对象的私有属性 stu_Student__name ; 不能使用stu.__name访问私有属性
李福春
2025/07/30
810
python基础复习:面向对象之继承
Python面向对象编程:深入理解类、对象、继承和多态
面向对象编程(Object-Oriented Programming,OOP)是一种强大的编程范式,它将数据和操作数据的方法组织成对象。Python是一门多范式的编程语言,支持面向对象编程,本文将深入探讨Python中的OOP概念,包括类、对象、继承、多态等,以帮助你更好地理解和应用面向对象编程。
海拥
2023/09/19
7210
Python面向对象编程:深入理解类、对象、继承和多态
python高级-面向对象特性(12)
在现实生活中,继承一般指的是子女继承父辈的财产,在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承足够,如下如所示:
Se7eN_HOU
2019/09/11
5290
python高级-面向对象特性(12)
面向对象
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)
周小董
2019/03/25
6720
面向对象
[Python基础13]面向对象特征封装|继承|多态
在我们程序开发过程中,定义好类型之后就可以通过类型来创建对象 如:我们定义一个中华人民共和国公民的类型
周小董
2022/04/12
6610
【愚公系列】2021年12月 Python教学课程 20-面向对象编程-类和对象
类,英文名字 Class,有“类别”,“分类”,“聚类”的意思。必须牢记类是抽象 的模板,用来描述具有相同属性和方法的对象的集合,比如 Animal 类。而实例是根据 类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 能不同。
愚公搬代码
2021/12/15
2810
【愚公系列】2021年12月 Python教学课程 20-面向对象编程-类和对象
Python|面向对象
#一、类、对象定义及使用 #定义类语法:class 类名(父类):代码块注意:()可有可无 #class Student: #class Student(): #创建对象(实例)语法:对象名=类名() 注意:Java语言在实例化对象是,采用new关键字,而Python语言不需要。 #student=Student() #isinstance()语法:isinstance()是检测一个对象是否是一个类的实例,语法格式:isinstance(对象,类),结果返回True和False # class Stu
py3study
2020/01/19
5010
相关推荐
原来学习Python面相对象编程这么简单
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 1.定义一个类
    • 1.1创建一个类
    • 1.2使用__init__初始化赋值
    • 1.3使用魔法方法_str_
    • 1.4 私有属性、方法
    • 1.5 装饰器,让方法像属性那样便利
    • 1.6 _del_ and _new_
    • 1.7 类属性、实例属性
    • 1.8 实例方法、类方法、静态方法
    • 1.9 C#封装案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档