>#类的命名演示
>#命名原则: 类名一定要满足大驼峰的命名原则,就是单词首字母大
>clsss ClassName:
> pass
一个完成的类包括:
类属性、类方法
实例属性、实例方法
私有属性、私有方法
静态方法、一些特殊的内置方法
>class 类名(object):
> #这是一个类的属性
> show_count = 0
> def __new__(cls, *args, **kwargs)::
> """
> 这是一个为对象分配内存的一个object的函数
> 这里必须调用一句话就是父类的方法super.__new__(cls)
> 不然的话我们的对象是创建不成功的
> """
> instance = super.__new__(cls)
> return instance
> def __init__(self):
> """
> 这是一个初始的函数
> 在对象刚创建的时候就会被创建
> """
> # 这是一个实例的属性
> # 这是一个私有的属性
> self.__age = 18
> # 这是一个共有的属性
> self.name = '小明‘
> pass
> def __del__(self):
> """
> 这个函数是一个当对象在内存中结束的时候调用的一个函数
> """
> pass
> def __str__(self):
> """
> 这个函数是在用print(实例)的时调用的,必须是一个返回的
> 参数return ""
> """
> return "这里自定义就好了"
> #这是一个私有的方法
> def __test(self):
> pass
> # 这是一个实例对象
> def run(self)
> pass
> #这是一个静态方法
> @staticmethod
> def static_run():
> pass
> # 这是一个类方法
> @classmethod
> def class_run():
> pass
>
>
作用:实例方法封装起来就是为了能更好的为对象进行服务的。通过对象调用,其中传入默认的参数为self,这个self作用是,那个对象调用代表那个对象,然后就可以通过这个进行操作。
调用:方法调用,通过
>对象名.方法()即可调用。有人可能会发现通过类名然后传入对象参数也可以进行调用。例如:
class CLanguage:
def info(self):
print("我正在学 Python")
clang = CLanguage()
#通过类名直接调用实例方法
CLanguage.info(clang)
可以看到,通过手动将 clang 这个类对象传给了 self 参数,
使得程序得以正确执行。实际上,这里调用实例方法的形式完
全是等价于 clang.info()。
>
可以参考:Python类调用实例方法
语法:
def drink(self):
pass
注意事项:注意命名规范。注意解释
作用:为了对象的使用
调用:
通过:对象名.属性
语法:
class A:
def __init__(self):
self.age = 1
a = A()
a.age
注意事项
在创建属性的时候,如果不给属性值,可以用None赋值。在创建对象时最容易出错的就是忘记带(),如a = A这个时候调用的时候就忘记带()了
作用 类属性用来纪录这个类的相关的特性,比如该类创建了几个对象,就可以通过定义一个类属性,在加上__init__()初始函数的配合就好了。
调用
调用的时候可以通过
类名.属性名,调用(推荐使用)
通过 对象.属性名,调用但是必须该对象没有相关的属性与类属性名一样的,所以一般不建议使用。这是属性获取机制的原理就是向上查找机制。
语法:
class A(object):
count = 0
@classmethod
def class_method(cls):
pass
a = A()
1 类名调用类属性(推荐)
A.count
2 对象调用类属性
a.count
3 类名调用类方法(推荐)
A.class_method()
4 在实例方法中没有与静态方法同名的时候就可以用对象来调用
a.class.method()
注意事项
什么属性用什么来调用,这样可以防止出错和各种意外
**作用:**为了有些属性和方法自己用来调用,不想被人知道,所以设置为私有方法就好了。
语法:
在这里插入代码片
```私有方法
class A(object):
def __init__(self):
# 私有属性
self.__age = age
#私有方法
def __private()
pass
调用:
方法只能内部调用,通过对象也就是self调用
在内部调用
self.__private()
self.age = 19
我们知道python是一个伪私有的语言,所以我们在外部调用的时候可以通过
对象.__类名__属性就可以得到调用
a = A()
a.__A__private()
这种了解即可。
注意事项:
什么属性用什么来调用,这样可以防止出错和各种意外
**作用:**在开发的时候我们不需要访问实例属性或者调用实例方法
也不用访问类属性或者类方法,这个时候可以把它设置为静态方法,比如在游戏中一般设置为游戏提示。
语法:
@staticmethod
def static_method():
pass
调用:
可以通过类名直接调用
其实对象也可以调用不建议
A.static_method()
注意事项:
建议用类名直接调用
class A(object):
def __str__(self):
str1 = "hello world"
return str
a = A()
# 我们调用print打印的时候输出的结果为 hello world
print(a)
class A(object):
def __new__(cls, *args, **keyword):
#首先我们要调用这个函数的父类方法获取地址
instance = super.__new__(cls)
return instance
import random
# 输出模块的完整路径
print(random.__file__)
-4 _ mro _ 、dir(对象)和__file__
_ mro_:主要用于、查看在多继承的时候看方法的执行顺序
dir(对象):查看该对象有哪些方法
_ file_:的作用是为了查模块的路径
class A(object):
def aa(self):
print("this is B")
class B(A):
def aa(self):
print("this is B")
print("mro的作用:%s" % B.mro())
print("dir的作用:%s" % dir(B))
print("__file__的作用:%s" % demo2.__file__)
"""
输出结果:
mro的作用:[, , ]
dir的作用:['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa']
__file__的作用:E:\python\zhu_0116\venv\demo2.py
"""
如单例模式代码:
class A(object):
#定义一个类属性,用来保存实例的内存.
instance = None
def __new__(cls, *args, **kwargs):
if instace is None:
instance = super.__new__(cls)
return instance
# 如果想让初始化的单独执行一次可以设置一个标记就好了